Howdy. Учитывайте следующее:PL/SQL Оценочный заказ
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, после чего обработка останавливается и результат ИСТИНА.
Мой вопрос в том, на что я могу положиться? Или это поведение может измениться в будущих выпусках PL/SQL? Если это может измениться, есть ли способ заставить функцию оцениваться, на которую я могу положиться (без создания другой переменной и использования отдельной инструкции присваивания)?
Perfecto. Только то, что я искал! – DCookie 2008-10-09 16:42:00
Мой google для «pl/sql complete boolean evaluation» дал мне точно такую же ссылку. – JosephStyons 2008-10-09 16:42:23