为什么Oracle不会在这里抛出错误

时间:2014-10-20 13:04:42

标签: sql oracle oracleexception

我正在看一个我没写在这里的剧本。它看起来像这样:

SELECT
...
AND (
       A.FIELD IN
       (
        ...
        ...
       )
       OR B.FIELD IN
       (
        ...
        ...
       ) 
    )
...

在它自己的脚本运行正常。没有错误。但是当我把它改为:

SELECT
...
AND B.FIELD IN
       (
        ...
        ...
       ) 
...

Oracle抛出ORA-01722: invalid number。为什么它不会为第一个查询抛出它?

更新

A.FIELD是一个数字 B.FIELD是VARCHAR2

值正在起作用的是一个数字。所以我理解并同意错误,但我想知道为什么它不会在第一个查询中抛出。但第二个是。

1 个答案:

答案 0 :(得分:2)

来自Oracle的文档:

  

在评估逻辑表达式时,PL / SQL使用短路   评价。也就是说,PL / SQL会立即停止评估表达式   结果可以确定。这可以让你编写表达式   否则可能会导致错误。

有关详细说明和示例,请参阅http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#sthref481

他们还有这个单独的文档,特别提到ORhttp://www.oracle-base.com/articles/misc/short-circuit-evaluation-in-plsql.php