我正在看一个我没写在这里的剧本。它看起来像这样:
SELECT
...
AND (
A.FIELD IN
(
...
...
)
OR B.FIELD IN
(
...
...
)
)
...
在它自己的脚本运行正常。没有错误。但是当我把它改为:
SELECT
...
AND B.FIELD IN
(
...
...
)
...
Oracle抛出ORA-01722: invalid number
。为什么它不会为第一个查询抛出它?
更新
A.FIELD是一个数字 B.FIELD是VARCHAR2
值正在起作用的是一个数字。所以我理解并同意错误,但我想知道为什么它不会在第一个查询中抛出。但第二个是。
答案 0 :(得分:2)
来自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