ハウディ。次のことを考慮してください。
SQL> DECLARE
2 b1 BOOLEAN;
3 b2 BOOLEAN;
4 FUNCTION checkit RETURN BOOLEAN IS
5 BEGIN
6 dbms_output.put_line('inside checkit');
7 RETURN TRUE;
8 END checkit;
9
10 PROCEDURE outp(n VARCHAR2, p BOOLEAN) IS
11 BEGIN
12 IF p THEN
13 dbms_output.put_line(n||' is true');
14 ELSE
15 dbms_output.put_line(n||' is false');
16 END IF;
17 END;
18 BEGIN
19 b1 := TRUE OR checkit;
20 outp('b1',b1);
21 b2 := checkit OR TRUE;
22 outp('b2',b2);
23 END;
24 /
b1 is true
inside checkit
b2 is true
PL/SQL procedure successfully completed
SQL>
ORステートメントの結果は順序に依存することに注意してください。最初に関数呼び出しを行うと、他の項の値に関係なく関数が実行されます。ORステートメントはTRUEが取得されるまで左から右に評価され、その時点で処理が停止し、結果がTRUEになるようです。
私の質問は、これは私が信頼できるものですか?または、この動作はPL / SQLの将来のリリースで変更される可能性がありますか?変更される可能性がある場合、(別の変数を作成したり、別の代入ステートメントを使用したりせずに)信頼できる関数を強制的に評価する方法はありますか?