当我在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
开始也会导致错误。
答案 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
查询的一部分。