oracle通过package执行select语句

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’));

效果如图:

以上代码贴出作为参考案例,不做解释为什么要这样写

 

 

 

–原创,转载请说明出处

上一篇
下一篇