--创建包规范
CREATE OR REPLACE PACKAGE emp_data_action AS
TYPE emp_type IS REF CURSOR RETURN emp%ROWTYPE;--定义强类型游标类型
--定义使游标变量的子程序
PROCEDURE getempbydeptno (emp_cur IN OUT emp_type,p_depotno NUMBER);
END emp_data_action;
--实现包体
CREATE OR REPLACE PACKAGE BODY emp_data_action AS
--创建在包规范中定义的过程
PROCEDURE getempbydeptno(emp_cur IN OUT emp_type,p_deptno NUMBER) IS
emp_row emp%ROWTYPE;
BEGIN
OPEN emp_cur FOR SELECT * FROM emp WHERE deptno = p_deptno --打开游标变量
LOOP
FETCH emp_cur INTO emp_row; --提取数据
EXIT WHEN emp_cur%NOTFOUND;
--输出游标数据
DBMS_OUTPUT.put_line('员工名称:'||emp_row.ename||'部门编号:'||emp_row.deptno);
END LOOP
CLOSE emp_cur;
END;
END;
END emp_data_action;
CREATE OR REPLACE PACKAGE emp_data_action AS
TYPE emp_type IS REF CURSOR RETURN emp%ROWTYPE;--定义强类型游标类型
--定义使游标变量的子程序
PROCEDURE getempbydeptno (emp_cur IN OUT emp_type,p_depotno NUMBER);
END emp_data_action;
--实现包体
CREATE OR REPLACE PACKAGE BODY emp_data_action AS
--创建在包规范中定义的过程
PROCEDURE getempbydeptno(emp_cur IN OUT emp_type,p_deptno NUMBER) IS
emp_row emp%ROWTYPE;
BEGIN
OPEN emp_cur FOR SELECT * FROM emp WHERE deptno = p_deptno --打开游标变量
LOOP
FETCH emp_cur INTO emp_row; --提取数据
EXIT WHEN emp_cur%NOTFOUND;
--输出游标数据
DBMS_OUTPUT.put_line('员工名称:'||emp_row.ename||'部门编号:'||emp_row.deptno);
END LOOP
CLOSE emp_cur;
END;
END;
END emp_data_action;
编译包时需要先对包规范进行编译,只有包规范编译通过后才能编译包体,在成功编译包后,可以用如下代码调用包中的过程;
DECLARE
emp_cursors emp_data_action.emp_type;--定义在包中定义的游标类型
BEGIN
emp_data_action.getempbydeptno(emp_cursors,20);--调用在包中定义的过程
END;