0

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

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

它自己的脚本运行良好。没有错误。但是当我将其更改为:

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

甲骨文抛出一个ORA-01722: invalid number. 为什么它不会在第一个查询中抛出它?

更新

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

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

4

1 回答 1

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

于 2014-10-20T13:15:09.503 回答