你好。考虑以下:
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 版本中改变吗?如果它可以改变,有没有办法强制评估我可以依赖的函数(不创建另一个变量并使用单独的赋值语句)?