如何在Oracle PL / SQL中将存储过程用作子查询

时间:2018-12-13 10:23:50

标签: xml plsql

我是PL SQL的新手,不知道是否可以进行以下操作

我需要基于来自多个表的多个查询来生成xml。我知道我可以执行以下操作:

with storage_info as (
    select storage_name as "storage_name"
           , id as "storage_id" 
    from storage 
    where             
    .....
    ),
    location_info as (
    select location_name as "location_name", id as "location_id" from location         
    where .....
    )
select xmlserialize(document
    xmlelement("storage",
    xmlelement("storageName", "storage_name"),                                     
    xmlelement("storageId", "storage_id"),                          
    xmlelement("location",
    (select xmlagg(
    xmlelement("locationId", "location_id"),                                     
    xmlelement("locationName", "location_name")                                               
    ) from location_info
    )
    )) from storage_info;

这使得将查询与xml生成分开非常容易。但是,我希望有一个用于xml生成的过程和一个用于查询的单独过程,因为这使xml生成过程更小且更易于维护,同时还能够重用查询过程。但是,如果我从存储过程中返回了一个游标,则必须:

  1. xml生成过程中的变量
  2. 将变量中的数据提取到存储过程中

这似乎很乏味,因为上述方法不需要任何方法。如果我想对查询使用存储过程,有什么办法吗?我应该使用视图代替查询吗?

编辑: 我发现了一些与我想要达到的目标相似但并不完全相同的东西。 我可以这样声明一个游标:

declare
 cursor store_info
 is
     select store_id, store_name 
     from store 
     where store_id = 26964;
 begin
     for rec in store_info
     loop
         dbms_output.put_line(rec.store_id || rec.store_name);
     end loop;
 end;

这样,我可以直接查询数据而不必将值放入任何变量中,但是我找不到找到这样的过程然后从xml生成过程中调用它的方法。

0 个答案:

没有答案