尝试打开游标

时间:2015-07-02 01:18:28

标签: database plsql package procedure

当我在PL / SQL中创建包数据库的规范和正文时,我有一个错误,“SQL语句被忽略”。

我写了这段代码:

PROCEDURE Get_All_Link_Recent_Result
    ( pi_userid        IN  TLMS_CM_RESULT.USERID%TYPE,
      pi_email         IN  TLMS_CM_RESULT.EMAIL%TYPE,
      pi_testid        IN  TLMS_CM_RESULT.TESTID%TYPE,
      po_ret_code      OUT VARCHAR2,
      po_ret_message   OUT VARCHAR2,
      po_ref_cursor    OUT type_cm_result_refcur
    ) IS
    l_userid           TLMS_CM_RESULT.USERID%TYPE;
    l_testid           TLMS_CM_RESULT.TESTID%TYPE;
    BEGIN
      l_userid   :=    pi_userid || 0;
      l_testid   :=    pi_testid || 0;
    OPEN po_ref_cursor

    FOR SELECT * FROM
      TLMS_CM_RESULT WHERE
      USERID LIKE l_userid AND
      TESTID LIKE l_testid AND
      EMAIL = pi_email
     ORDER BY
      USERID;

  po_ret_code := c_err_msg_other;
  EXCEPTION
    WHEN OTHERS THEN
      po_ret_code := c_err_msg_other;
      po_ret_message := SQLERRM;
  END Get_All_Link_Recent_Result;

“PL / SQL:SQL语句忽略”错误的特定行是

OPEN po_ref_cursor

因此,之后的语句,从FOR SELECT * FROM开始也会导致错误。

1 个答案:

答案 0 :(得分:0)

OPEN CURSOR是一份独立完整的声明。也就是说,它应该以半冒号结束。在你的情况下,缺少半结肠。

我不确定你要用你的代码实现什么,我无法测试它。但是我不清楚为什么在没有明确关闭它的情况下打开游标。另一件事是你似乎试图用FOR LOOP隐式打开另一个光标。这不是这样做的方法。

例如,我会按如下方式重写部分代码::

OPEN po_ref_cursor;  --add semi-colon

FOR I IN (SELECT * FROM
  TLMS_CM_RESULT WHERE
  USERID LIKE l_userid AND
  TESTID LIKE l_testid AND
  EMAIL = pi_email
 ORDER BY
  USERID)

LOOP

 po_ret_code := I.c_err_msg_other;

END LOOP;

假设c_err_msg_other是您SELECT查询的一部分。