You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:37:40