从过程返回多行,选择语句 PL/SQL

Delta1x

这是一个匿名块的过程部分,它从中获取参数 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;
XING

正如@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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章