编译包体时出现PLS-00324错误

时间:2014-03-07 22:25:31

标签: database oracle package

当我编译下面的代码时,我得到PL-00324错误。此错误表示变量V_CD_ESTADO无法从光标C_VERIFICA接收返回,因为它不是游标。很奇怪,不是吗?我研究了很多,但找不到能帮助我的东西......所以,如果有人帮助我,我将非常感激!

PLS-00324游标属性可能不适用于非游标“字符串”

CREATE OR REPLACE PACKAGE BODY PCK_TB_ESTADO
IS
  FUNCTION FNC_VALIDA_ESTADO
  (P_CD_ESTADO IN TB_FUNCIONARIO.CD_ESTADO%TYPE)
  RETURN BOOLEAN
  IS
    CURSOR C_VERIFICA
    IS
      SELECT CD_ESTADO
      FROM TB_FUNCIONARIO
      WHERE CD_ESTADO = P_CD_ESTADO;
    V_CD_ESTADO TB_FUNCIONARIO.CD_ESTADO%TYPE;
  BEGIN
    OPEN C_VERIFICA;
      FETCH C_VERIFICA INTO V_CD_ESTADO;
    IF V_CD_ESTADO%NOTFOUND THEN
      RETURN TRUE;
    ELSE
      RETURN FALSE;
    END IF;
    CLOSE C_VERIFICA;
  END;
END;

2 个答案:

答案 0 :(得分:2)

您想要检查未找到C_VERIFICA%NOTFOUND的光标状态而不是变量V_CD_ESTADO

答案 1 :(得分:0)

光标属性%FOUND%NOTFOUND%ROWS%%IS_OPEN等仅适用于CURSOR。即游标定义为CURSOR cursor_1 IS ...

在这种情况下,游标cursor_1可以具有这些游标属性。例如cursor_1%IS_OPENcursor_1%NOTFOUND等。在您的代码中,您显然将游标属性与非游标元素关联,即V_CD_ESTADO,这只是TB_FUNCIONARIO.CD_ESTADO的{​​{1}}的变量。

你打算做的是

TYPE

因为IF C_VERIFICA%NOTFOUND THEN RETURN TRUE; ELSE RETURN FALSE; END IF; 是这里的光标。