package执行select就是把需要查询的sql尽情拼接封装,然后把数据展现出来
以下以scott.dept表为例
收先包分为包头和包体(至于为什么这个分,我也不知道)
包头代码如下:
CREATE OR REPLACE PACKAGE mypack IS
–测试
–PROCEDURE myproc(deptno IN CHAR,);
———————-
TYPE t_dept IS RECORD(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13)
)
;
TYPE ta_dept IS TABLE OF t_dept;
FUNCTION get_deptinfo(v_deptno IN CHAR) RETURN ta_dept PIPELINED;
END mypack;
然后定编写包体:
CREATE OR REPLACE package BODY mypack IS
–创建包体
FUNCTION get_deptinfo(v_deptno IN CHAR) RETURN ta_dept PIPELINED
is
out_rec t_dept;
in_rec t_dept;
p_sql VARCHAR2(4000);
p_count NUMBER;
p SYS_REFCURSOR;
BEGIN
–dbms_output.put_line(‘进入包体’);
p_sql:=’select * from dept where deptno like ”%’||v_deptno||’%” ‘;
dbms_output.put_line(p_sql);
OPEN p FOR p_sql;
LOOP
FETCH p INTO in_rec;
EXIT WHEN p%NOTFOUND;
out_rec.deptno := in_rec.deptno;
out_rec.dname := in_rec.dname;
out_rec.loc :=in_rec.loc;
PIPE ROW(out_rec);
END LOOP;
CLOSE p;
RETURN;
END;
END mypack;
最后进行测试:
SELECT * FROM TABLE(mypack.get_deptinfo(‘0’));
效果如图:

以上代码贴出作为参考案例,不做解释为什么要这样写
–原创,转载请说明出处