首页 > 安全资讯 >

oracle使用临时表返回数据表

12-10-18

oracle使用临时表返回数据表找了很多关于存储过程返回数据表的文章,发现oracle和sqlserver有很大的区别,sqlserver可以直接在存储过程返回数据表,而oracle的存储过程不能直接返回数据表,最多就返回数据表指针...


oracle使用临时表返回数据表
 
 找了很多关于存储过程返回数据表的文章,发现oracle和sqlserver有很大的区别,sqlserver可以直接在存储过程返回数据表,而oracle的存储过程不能直接返回数据表,最多就返回数据表指针,如果你想在sql里看到返回的内容,还需要写一个循环去读取里面的内容。这里我写了一个管道表函数去返回我想要的内容。
 
备注:DWXXTreeNode:单位信息树节点(相当于一行)
 
DWXXTree:单位信息树(相当于表)
  www.2cto.com  
dwxx:单位信息表(数据表)
 
这里用到了 存储过程返回数据表、管道表函数的内容,网上很多,这里就不介绍了。 需要注意的是,oracle是区分大小写的,所以DWXXTreeNode 、DWXXTree使用的时候必须大小写一致。
 
写这篇东西只是想将存储过程返回数据表的内容补充完整,因为有时候我只是想在pl/sql里面看内容,不是输出到外面的。写完package之后,我觉得package像java的类一样,有属性、方法,body里面进行实现。
 
调用:select * from table(PG_dwxxTree.getTree(0));
 
pl/sql代码如下:
 
[sql] 
--树节点,用于函数返回  
create or replace type DWXXTreeNode is object  
(  
  dwdm varchar2(15),--单位代码  
  dmd number(2)--层数  
);  
create or replace type DWXXTree is table of DWXXTreeNode;  
    www.2cto.com  
--包定义  
CREATE OR REPLACE PACKAGE PG_dwxxTree IS  
  type DataTable IS REF CURSOR ;  
  type TreeNode is record  
  (  
    dwdm varchar2(15),  
    dmd number(2)  
  );  
  procedure createTree(dt OUT DataTable,fz in number);--条件:dt:数据表指针,fz:分组  
  function getTree(fz in number) return DWXXTree pipelined;  
END PG_dwxxTree;  
  
--包体,用于生成单位树  
CREATE OR REPLACE PACKAGE BODY PG_dwxxTree IS  
  
      procedure createTree(dt OUT DataTable,fz in number)  
      IS  
      BEGIN  
          --具体实现可以在这里写,也可以使用临时表  
          OPEN dt FOR  
          SELECT dwdm,dmd FROM dwxx where rownum < 5;  
      END createTree;  
    www.2cto.com  
      --调用存储过程返回结果  
     function getTree(fz in number) return dwxxTree pipelined  
      is  
          obj_dwxxTreeNode DWXXTreeNode;  
          tb_cursor PG_dwxxTree.DataTable;  
          item PG_dwxxTree.TreeNode;  
      begin  
          createTree(tb_cursor,fz);  
          loop  
               fetch tb_cursor into item;  
               exit when tb_cursor%notfound;  
               dbms_output.put_line(item.dwdm || ' ' ||item.dmd || ' ');  
               obj_dwxxTreeNode :=  dwxxTreeNode(item.dwdm,item.dmd);  
               pipe   row(obj_dwxxTreeNode);  
           end loop;  
  
           return;  
      end getTree;      
end PG_dwxxTree;  
相关文章
最新文章
热点推荐