设为首页 - 加入收藏 PHP编程网 - PHP站长网 (http://www.52php.cn)- 电商,百科,编程,业界,移动互联,5G,云计算,站长网!
热搜: 专业 娱乐 服务 百度
当前位置: 首页 > 站长百科 > 正文

oracle – 为什么dbms_sql.parse包含带有绑定变量的错误PL / SQL

发布时间:2021-05-14 12:07 所属栏目:[站长百科] 来源:网络整理
导读:下面的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

下面的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 1120
ORA-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提出来了.

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

推荐文章
热点阅读