我正在看一个我没有在这里写的脚本。它看起来像这样:
SELECT
...
AND (
A.FIELD IN
(
...
...
)
OR B.FIELD IN
(
...
...
)
)
...
就其本身而言,脚本运行良好。没有错误。但当我把它改为:
SELECT
...
AND B.FIELD IN
(
...
...
)
...
Oracle抛出一个ORA-01722: invalid number
。为什么它不为第一个查询抛出它呢?
更新
A.FIELD是一个数字B.FIELD是VARCHAR2
正在处理的值是一个数字。所以我理解并同意这个错误,但我想知道为什么第一个查询中没有抛出它。但第二个是。
来自Oracle的文档:
在计算逻辑表达式时,PL/SQL使用短路评价也就是说,PL/SQL在可以确定结果。这使您可以编写表达式否则可能会导致错误。
请参阅http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#sthref481用于进一步的解释和示例。
他们还有这个单独的文件,特别提到OR
:http://www.oracle-base.com/articles/misc/short-circuit-evaluation-in-plsql.php