找了很多关于存储过程返回数据表的文章,发现oracle和sqlserver有很大的区别,sqlserver可以直接在存储过程返回数据表,而oracle的存储过程不能直接返回数据表,最多就返回数据表指针,如果你想在sql里看到返回的内容,还需要写一个循环去读取里面的内容。这里我写了一个管道表函数去返回我想要的内容。
备注:DWXXTreeNode:单位信息树节点(相当于一行)
DWXXTree:单位信息树(相当于表)
dwxx:单位信息表(数据表)
这里用到了 存储过程返回数据表、管道表函数的内容,网上很多,这里就不介绍了。 需要注意的是,oracle是区分大小写的,所以DWXXTreeNode 、DWXXTree使用的时候必须大小写一致。
写这篇东西只是想将存储过程返回数据表的内容补充完整,因为有时候我只是想在pl/sql里面看内容,不是输出到外面的。写完package之后,我觉得package像java的类一样,有属性、方法,body里面进行实现。
调用:select * from table(PG_dwxxTree.getTree(0));
pl/sql代码如下:
--树节点,用于函数返回
create or replace type DWXXTreeNode is object
(
dwdm varchar2(15),--单位代码
dmd number(2)--层数
);