尝试打开游标时忽略 SQL 语句
Posted
技术标签:
【中文标题】尝试打开游标时忽略 SQL 语句【英文标题】:SQL statement ignore when attempted to open cursor 【发布时间】:2015-07-02 01:18:28 【问题描述】:当我在 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 Statement ignore”错误的特定行是行
OPEN po_ref_cursor
那么,后面的语句,以FOR SELECT * FROM
开头也会报错。
【问题讨论】:
【参考方案1】: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
查询的一部分。
【讨论】:
以上是关于尝试打开游标时忽略 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章