我有被構造爲隨後的Oracle查詢:Oracle是否使用短路評估?
SELECT *
FROM table
WHERE X='true' OR
Y IN (complicated subquery)
如果Oracle看到的是X不等於「真」將它仍然試圖評估WHERE子句的Y IN(子查詢)的一部分?而且,在這樣的陳述中,子查詢是否會針對表中的每個條目執行多次?我會喜歡的東西更好:
WITH subQ as (complicated subquery)
SELECT *
FROM table
WHERE X='true' OR
Y IN (SELECT id FROM subQ)
謝謝,這有助於很多。 – aoi222 2012-01-17 19:52:52
「雖然PL/SQL保證執行短路評估」 你從哪裏拿? 我試過這個,並得到一個錯誤: 'declare var varchar2(30); begin 選擇'short circuit'into var from dual,其中1 = 0和1/0 = 0; end;' – 2012-02-08 17:25:33
@IsaacKleinman - 這仍然是SQL。如果你把條件放在PL/SQL中,你會看到短路。如果(1 <2或1/0 = 1) 然後 dbms_output.put_line('Short circuit');則開始 ; end if; end;' – 2012-02-08 17:54:41