나는 여기에 쓰지 않은 스크립트를보고있다. 그것은에오라클이 여기에 오류를 던지지 않는 이유
SELECT
...
AND (
A.FIELD IN
(
...
...
)
OR B.FIELD IN
(
...
...
)
)
...
스크립트가 잘 실행 소유이다 : 그것은 다음과 같이 보입니다. 오류 없음. 나는 그것을 변경할 때 :
SELECT
...
AND B.FIELD IN
(
...
...
)
...
오라클은 ORA-01722: invalid number
가 발생합니다. 어떻게 그것이 첫 번째 쿼리를 위해 던지지 않는가?
업데이트
A.FIELD 숫자 B.FIELD는 VARCHAR2
값은에 노력하는 숫자입니다입니다. 그래서 나는이 오류를 이해하고 동의하지만 첫 번째 질의에 왜 던지지 않았는지 궁금해했다. 그러나 두 번째입니다. 오라클의 문서에서
http://www.oracle-base.com/articles/misc/short-circuit-evaluation-in-plsql.php는'B.FIELD'의'IN'의 값 중 하나를 보지 않고 말할 수 :
그들은이 별도의 문서 구체적으로
OR
에 대한 그 언급이있다. –SQL 문을 느리게 평가하는지 확실하지 않지만 A.Field가 OR 문에서 true이므로 첫 번째 문이 B.Field 섹션을 평가하지 않는다고 가정합니다. – Grice
@ X.L.Ant 필자는 Q를 업데이트했습니다. 오류가 발생하는 이유를 이해하지만 첫 번째 문에는 나타나지 않지만 두 번째 문에서는 발생하지 않는 이유를 이해합니다. 오라클은 다음과 같은 쿼리를 어떻게 실행합니까? – Jonnny