我正在开发一个PL / SQL包,刚刚完成了一般框架,以便我可以进行第一次测试。
但是,我的程序中出现了一个奇怪的sm_20
错误,我似乎无法弄明白。
任何关于我的游标可能无效的想法?两个游标的SELECT语句都返回值,我使用双引号转义ORA-01001 invalid cursor
和"KEY"
,以避免遇到保留字的问题......
这是我的包裹体代码,感谢提前提示:
"VALUE"
答案 0 :(得分:3)
编辑:我发现你的包中有些错误
1)您尝试更新
sql_query := 'UPDATE MY_TABLE_3 SET :1 = :2;';
并与例如'col1'和'val2'绑定后;它看起来像
UPDATE MY_TABLE_3 SET 'col1' = 'val2';
但是当你在execute immediate语句中使用绑定变量时,你只发送文字。你不能用另一个字符串更新一个字符串。 如果要编写正确的更新,则应添加SQL注入;
sql_query := 'UPDATE MY_TABLE_3 SET '||vc_my_variable1 ||' = :2;';
...
EXECUTE IMMEDIATE sql_query USING vc_my_variable2;
2)下一个(完成)
移动EXIT WHEN c_cursor1%NOTFOUND;
FETCH c_cursor1 INTO vc_my_variable1, vc_my_variable2;
之后
3)错误ORA-01001无效游标。如果您的MAXOPENCURSORS太小或者必须使用OLON或OLOGON定义登录数据区(LDA),则可能会出现。如果未定义LDA,则会针对以下调用发出此消息:OPEN,COM,CON,ROL和LOGOFF。 http://www.dba-oracle.com/t_ora_01001_invalid_cursor.htm