【发布时间】:2014-12-10 15:27:15
【问题描述】:
我正在尝试从 Oracle 存储过程返回一个游标。在我的 SP 中,我正在创建一个动态 SQL,但出现以下错误:
ORA-00604:递归 SQL 级别 1 发生错误
ORA-01003: 没有解析语句
这是我的代码,只有当我使用管道在我的 SQL 中添加变量时才会出现错误
PROCEDURE GET_EXP_INV_RECORD
(
OUT_REVENUE_DETAILS_CUR OUT OUTCURSOR, -- TYPE OUTCURSOR IS REF CURSOR
IN_SEQ_NO IN SOME_TABLE.SEQ#%TYPE
)AS
L_SQL_QUERY varchar2(32000);
L_LOC_BLR VARCHAR2(50) := 'Bangalore';
L_LOC_PUNE VARCHAR2(50) := 'Pune';
L_LOC_MAS VARCHAR2(50) := 'Chennai';
L_SQL_QUERY := 'SELECT
CASE WHEN CONDITION1 THEN ' || L_LOC_BLR || -- POTENTIAL ERROR SOURCE
' WHEN CONDITION2 THEN ' || L_LOC_PUNE ||
' ELSE ' || L_LOC_MAS ||
' END AS LOCATION FROM MY_TABLE WHERE SOME_COL = SOME_VAL';
OPEN OUT_REVENUE_DETAILS_CUR FOR L_SQL_QUERY;
EXCEPTION
WHEN OTHERS THEN
-- LOG THE ERROR
ROLLBACK;
RETURN;
END GET_EXP_INV_RECORD;
如果我将变量 L_LOC_BLR 替换为实际字符串,它可以正常工作。 你能帮我找出这个错误的原因吗?
谢谢
【问题讨论】:
-
打开游标时最好使用USING和绑定变量
-
使用
dynamic sql,始终在开发环境中使用dbms_output进行测试。所以,发布dbms_output.put_line的输出。