为什么此块不给出NULL错误?内。并使用其他任何指令引发错误(ORA-06502:PL / SQL:数字或值错误)?
BEGIN
IF 'x' = 1 THEN
NULL;
--dbms_output.put_line('test');
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
我认为您遇到的情况是,已将编译参数PLSQL_OPTIMIZE_LEVEL设置为一个足够高的值,以允许编译器优化您的代码。
因此,当您拥有NULL;自己的IF语句时,可以对其进行重写以IF在编译时删除该语句。
但是,NULL;由于IF语句中不存在其他内容,因此无法再将其删除,因此将进行检查'x' = 1。如果将字符值与数字进行比较,Oracle会将字符值转换为数字,因此在您的情况下,这意味着比较失败,因为x不是数字。
例如:
以下作品:
ALTER SESSION SET plsql_optimize_level = 2;
BEGIN
IF 'x' = 1 THEN
NULL;
--dbms_output.put_line('test');
END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)
但是以下失败:
ALTER SESSION SET plsql_optimize_level = 1;
BEGIN
IF 'x' = 1 THEN
NULL;
--dbms_output.put_line('test');
END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)
唯一的区别是该PLSQL_OPTIMIZE_LEVEL值-2或更高,编译器将优化不相关的IF语句(1或更低),但不会。
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |