我在看一個我沒有寫在這裏的腳本。它看起來像這樣:爲什麼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