Oracle存储过程创建游标编译失败,请求问题排查
存储过程编译失败排查与修复方案
嘿,我来帮你揪出这个存储过程编译失败的问题!仔细看了你的代码,有两个关键问题导致编译不通过:
- 游标记录变量未声明:你在游标循环里直接用了
SHIFT_REC来接收游标返回的数据,但没有提前定义这个变量。Oracle要求必须先声明与游标结构匹配的记录类型,最简单的方式是使用SHIFT_CURSOR%ROWTYPE来自动匹配游标字段。 - 输出文本拼写错误(非编译错误但建议修正):
DBMS_OUTPUT.PUT_LINE里的EMPLOYYE ID多了一个字母Y,正确写法是EMPLOYEE ID,修正后输出内容更规范。
修正后的完整存储过程代码
CREATE OR REPLACE PROCEDURE CAL_SALLARY AS -- 声明与游标结构匹配的记录变量 SHIFT_REC SHIFT_CURSOR%ROWTYPE; CURSOR SHIFT_CURSOR IS SELECT EMPLOYEE_ID, SUM(SHIFT_CHARGE) AS SALARY FROM SHIFT GROUP BY EMPLOYEE_ID; BEGIN OPEN SHIFT_CURSOR; LOOP FETCH SHIFT_CURSOR INTO SHIFT_REC; EXIT WHEN SHIFT_CURSOR%NOTFOUND; DBMS_OUTPUT.PUT_LINE('EMPLOYEE ID : ' || SHIFT_REC.EMPLOYEE_ID || ' SALARY : ' || SHIFT_REC.SALARY); END LOOP; CLOSE SHIFT_CURSOR; END; /
执行说明
编译通过后,在SQL*Plus里需要先开启输出功能,再调用存储过程:
SET SERVEROUTPUT ON; EXEC CAL_SALLARY;
内容的提问来源于stack exchange,提问作者Madhushani Hewagama
相关产品推荐
相关产品推荐

