你好.考虑以下:
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的未来版本中发生变化?如果它可以改变,有没有办法强制我可以依赖的函数被评估(不创建另一个变量并使用单独的赋值语句)?
是.PL/SQL 从左到右执行逻辑表达式的短路评估.