PL SQL Data Types Oracle PLSQL Tutorial

PL/SQL stops evaluating the expression as soon as the result can be determined.

SQL> declare
  2      v_day NUMBER := TO_CHAR(TO_DATE('20060101','YYYYMMDD'),'D');
  3
  4      function f_DayNr return NUMBER is
  5      begin
  6          DBMS_OUTPUT.put_line('Called function');
  7          return v_day;
  8      end;
  9  begin
 10      if f_DayNr in (1,7) or (f_DayNr not in (1,7) and (f_DayNr between 0 and 6 or f_DayNr between 19 and 23))
 11      then
 12          DBMS_OUTPUT.put_line(v_day || ': Off-peak');
 13      else
 14          DBMS_OUTPUT.put_line(v_day || ': Peak');
 15      end if;
 16  end;
 17  /
Called function
1: Off-peak
PL/SQL procedure successfully completed.
SQL>