【问题标题】:Getting PLS-00324 error when compile a Package Body编译包体时出现 PLS-00324 错误
【发布时间】:2014-03-08 09:03:38
【问题描述】:

当我在下面编译这段代码时,我得到 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;

【问题讨论】:

    标签: database oracle package


    【解决方案1】:

    您要检查游标状态是否为 not found C_VERIFICA%NOTFOUND 而不是变量 V_CD_ESTADO

    【讨论】:

      【解决方案2】:

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

      在这种情况下,光标cursor_1 可以具有这些光标属性。如cursor_1%IS_OPENcursor_1%NOTFOUND等。在您的代码中,您显然将光标属性与非光标元素相关联,即V_CD_ESTADO,它只是TB_FUNCIONARIO.CD_ESTADOTYPE 的一个变量。

      你打算做的是

      IF C_VERIFICA%NOTFOUND THEN
      RETURN TRUE;
      ELSE
        RETURN FALSE;
      END IF;
      

      因为C_VERIFICA是这里的光标。

      【讨论】:

        猜你喜欢
        • 2014-04-12
        • 2011-01-21
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多