为什么甲骨文不在这里抛出错误



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

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

相关内容

  • 没有找到相关文章

最新更新