我在看一个我没有写在这里的脚本。它看起来像这样:为什么Oracle不会在这里抛出一个错误
SELECT
...
AND (
A.FIELD IN
(
...
...
)
OR B.FIELD IN
(
...
...
)
)
...
在它自己的脚本运行良好。没有错误。但是当我将其更改为:
SELECT
...
AND B.FIELD IN
(
...
...
)
...
Oracle抛出ORA-01722: invalid number
。为什么它不会为第一个查询抛出它呢?
更新
A.FIELD是一个数字 B.FIELD是VARCHAR2
值对工作是一个数字。所以我明白并同意这个错误,但我想知道为什么它不会被抛出第一个查询。但第二个是。
很难说没有看到在'B.FIELD'的'IN'任何值。 – 2014-10-20 13:07:40
我会假设第一条语句不评估B.Field部分,因为A.Field在OR语句中是真实的,尽管我不确定SQL是否懒惰地评估语句。 – Grice 2014-10-20 13:09:01
@ X.L.Ant我已经更新了我的问题。我明白为什么会出现错误,但不是为什么它不会在第一条语句中出现,而是在第二条语句中出现。 Oracle如何执行这样的查询 – Jonnny 2014-10-20 13:12:48