create or replace procedure XU_YANG.NEXT_EMP( SET_EPNO in YX_EMP.EMPNO%type, NEXT_LEVEL out sys_refcursor ) is emp_row YX_EMP%ROWTYPE; begin open NEXT_LEVEL for select * from YX_EMP e where e.MGR = SET_EPNO order by EMPNO; -- 只查询 MGR = SET_EPNO 的员工并按照 EMPNO 排序 loop fetch NEXT_LEVEL into emp_row; exit when NEXT_LEVEL%notfound; end loop; close NEXT_LEVEL; end; DECLARE result_set SYS_REFCURSOR; BEGIN XU_YANG.NEXT_EMP(1234, result_set); for parai in result_set loop then result_set%notfound; dbms_output.put_line(parai.EMPNO||parai.ENAME); end loop; END;怎麽調用這個過程,爲什麽上面的調用會報錯
时间: 2024-03-12 22:50:26 浏览: 54
您可以使用以下代码来调用该存储过程:
```
DECLARE
result_set SYS_REFCURSOR;
BEGIN
XU_YANG.NEXT_EMP(1234, result_set);
-- 使用循环遍历游标数据
LOOP
FETCH result_set INTO emp_row;
EXIT WHEN result_set%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(emp_row.EMPNO || ' ' || emp_row.ENAME);
END LOOP;
-- 关闭游标
CLOSE result_set;
END;
```
请确保参数SET_EPNO传递的值在表YX_EMP中存在,否则可能会导致结果为空。同时,您在存储过程中使用的游标变量名与调用代码中使用的变量名不一致,可能会导致编译错误。请在调用代码中使用与存储过程中定义的变量名相同的变量名,以避免这种错误。
相关问题
解释一下语句 create or replace procedure ch_deptno (p_empno in emp.empno%type, p_deptno in emp.deptno%type) is v_empno number :=O; v_deptno number :=0; m_deptno emp. empno%type;
这是一个 Oracle PL/SQL 存储过程的定义语句。该存储过程名为 ch_deptno,包含两个输入参数 p_empno 和 p_deptno,数据类型分别为 emp 表中 empno 和 deptno 列的数据类型。在存储过程中,声明了三个局部变量:v_empno,v_deptno 和 m_deptno,数据类型分别为 number 和 emp 表中 empno 列的数据类型。其中,v_empno 和 v_deptno 的初始值都为 0。
接下来的具体实现逻辑需要根据实际需求进行编写。
阅读全文