gpt4 book ai didi

oracle - 为什么包含带有绑定(bind)变量的错误 PL/SQL block 的 dbms_sql.parse 会意外成功?

转载 作者:行者123 更新时间:2023-12-02 03:34:45 24 4
gpt4 key购买 nike

下面的 PL/SQL block 按预期失败:

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 block 能够成功完成?

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

最佳答案

看起来解析仅适用于具有绑定(bind)的匿名 block 的语法,并且完整的语义检查被推迟到执行。

不过,这不是我们想要的行为,因此引发了 Bug 26669757。

关于oracle - 为什么包含带有绑定(bind)变量的错误 PL/SQL block 的 dbms_sql.parse 会意外成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45811569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com