oracle – 为什么dbms_sql.parse包含带有绑定变量的错误PLSQL块意外成功?

oracle – 为什么dbms_sql.parse包含带有绑定变量的错误PLSQL块意外成功?,第1张

概述下面的PL / SQL块按预期失败: SQL> declare 2 i int; 3 begin 4 i := dbms_sql.open_cursor; 5 dbms_sql.parse(i,'begin dontexist; dbms_output.put(''a''); end;',1); 6 dbms_sql.close_cursor(i); 下面的PL / sql块按预期失败:

sql> declare  2    i int;  3  begin  4    i := dbms_sql.open_cursor;  5    dbms_sql.parse(i,'begin dontexist; dbms_output.put(''a''); end;',1);  6    dbms_sql.close_cursor(i);  7  end;  8  /declare*FOUT in regel 1:.ORA-06550: Regel 1,kolom 7:PLS-00201: IDentifIEr 'DONTEXIST' must be declared.ORA-06550: Regel 1,kolom 7:PL/sql: Statement ignored.ORA-06512: in "SYS.DBMS_sql",regel 1120ORA-06512: in regel 5

因为我没有名为DONTEXIST的程序.我的问题是为什么下一个PL / sql块成功完成?

sql> declare  2    i int;  3  begin  4    i := dbms_sql.open_cursor;  5    dbms_sql.parse(i,'begin dontexist; dbms_output.put(:a); end;',1);  6    dbms_sql.close_cursor(i);  7  end;  8  /PL/sql-procedure is geslaagd.

区别在于使用bind变量而不是常量,但我想知道为什么这会产生影响.

这是Oracle 12.1.0.2

解决方法 看起来解析只是具有绑定的匿名块的语法,并且完整的语义检查被推迟到执行.

不过,这不是我们想要的行为所以BUG 26669757提出来了.

总结

以上是内存溢出为你收集整理的oracle – 为什么dbms_sql.parse包含带有绑定变量的错误PL / SQL块意外成功?全部内容,希望文章能够帮你解决oracle – 为什么dbms_sql.parse包含带有绑定变量的错误PL / SQL块意外成功?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165782.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存