Evaluation of PL/SQL boolean variables in Oracle Forms Evaluation of PL/SQL boolean variables in Oracle Forms oracle oracle

Evaluation of PL/SQL boolean variables in Oracle Forms


We can test this in SQLPlus to see what happens in each of the 3 situations (true, false, null):

set serveroutput ondeclare  true_value boolean := true;  false_value boolean := false;  null_value boolean;begin    if not true_value then  --Should not pass      dbms_output.put_line('True Value');    end if;    if not false_value then --Should pass      dbms_output.put_line('False Value');    end if;    if null_value is null then --Just to make sure it is null      dbms_output.put_line('Null Value is Null');    end if;    if not null_value then --Should not pass      dbms_output.put_line('Null Value');    end if;end;/

Which produces:

SQL> set serveroutput onSQL>SQL> declare  2    true_value boolean := true;  3    false_value boolean := false;  4    null_value boolean;  5  begin  6  7      if not true_value then  --Should not pass  8        dbms_output.put_line('True Value');  9      end if; 10 11      if not false_value then --Should pass 12        dbms_output.put_line('False Value'); 13      end if; 14 15      if null_value is null then --Just to make sure it is null 16        dbms_output.put_line('Null Value is Null'); 17      end if; 18 19      if not null_value then --Should not pass 20        dbms_output.put_line('Null Value'); 21      end if; 22  end; 23  /False ValueNull Value is NullPL/SQL procedure successfully completed.SQL>

So the only possible code path that can produce your expected output is if the value going into the conditional is false. If that is not what you are seeing or expecting then something else must be happening in your procedure or as a side effect.


What value is the variable being set to? Do understand that if the value is null, the the block will never execute. I'm not sure if that's your problem, but here's an example:

DECLAREis_viewable BOOLEAN;BEGIN  IF NOT is_viewable  THEN      /* this won't execute */      dbms_output.put_line('nope');  END IF;  IF is_viewable  THEN      /* neither will this */      dbms_output.put_line('nope');  END IF;END;

Of course, I don't know how Oracle Forms would be doing it differently, but maybe it's setting the variable to null somehow?


NOT is_viewable evaluates to TRUE if and only if is_viewable is FALSE.

In your case, is_viewable is probably being set to NULL; perhaps the Forms debugger shows you "FALSE" in this scenario causing confusion.

Try this code instead:

IF NOT is_viewable THEN    raise_my_error();ELSIF is_viewable IS NULL THEN   raise_another_error();END IF;