这是一个匿名块的过程部分,它从中获取参数 pID,parcel_id。我的问题是 select 语句是为了查找和显示所有接触查询包裹的包裹,当我输入时,它在普通的 SQL 查询中工作得很好,
select target.district_id, target.parcel_id ,query.parcel_id, sdo_geom.relate(target.geom, 'determine', query.geom, 0.05)Relationship
from Parking target, Parking query
where query.parcel_id = 68
and target.district_id = 1
and sdo_relate(target.geom, query.geom, 'mask=TOUCH') = 'TRUE';
该示例返回五行,其中包含 5 个不同的包裹,这些包裹接触包裹 68。但是,当我在该过程中执行此操作时,我要么得到“太多行错误”,要么如果我尝试添加“And Rownum <2”,则它可以正常工作,但是不显示所有关系,即它贯穿并显示每个地块的一个关系。有什么我可以做的来改善这一点吗?我一直在阅读网站上的其他帖子,并且有对参考游标的引用,但我不知道这些在此处如何适用。非常感谢。
procedure Payx (pID number )is
varDistrict Parking.District_id%type;
vID Parking.parcel_id%type;
vQED Parking.parcel_id%type;
varRel varchar2(20);
begin
select target.district_id, target.parcel_id,query.parcel_id, sdo_geom.relate(target.geom, 'determine', query.geom, 0.05)Relationship
into varDistrict
vID,
vQED,
varRel
from Parking target, Parking query
where query.parcel_id = pID
and sdo_relate(target.geom, query.geom, 'mask=TOUCH') = 'TRUE'
and rownum <2;
--- dbms_output.put_line('')
end Payx;
正如@Muhammad Muazzam 所提到的,由于查询正在返回,multiple rows
您需要一次collection
保存记录,或者您可以loop
通过选择并保存您声明的变量中的记录。我向您展示了如何使用RECORD
.
create or replace procedure payx (pid number)
is
--Created a record by bundling all your single defined variables
type xx is RECORD
(
vardistrict parking.district_id%type,
vid parking.parcel_id%type,
vqed parking.parcel_id%type,
varrel varchar2 (20);
);
type var is table of xx index by pls_integer;
var1 var;
begin
select target.district_id,
target.parcel_id,
query.parcel_id,
sdo_geom.relate (target.geom,
'determine',
query.geom,
0.05
) relationship
bulk collect into var1
from parking target,
parking query
where query.parcel_id = pid
and sdo_relate (target.geom,
query.geom,
'mask=TOUCH'
) = 'TRUE' ;
for i in 1..var1.count
loop
dbms_output.put_line ( var1 (i).vardistrict
|| var1 (i).vid
|| var1 (i).vqed
|| var1 (i).varrel);
end loop;
end payx;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句