sql >> データベース >  >> RDS >> Oracle

OracleFormsでのPL/SQLブール変数の評価

    これをSQLPlusでテストして、3つの状況(true、false、null)のそれぞれで何が起こるかを確認できます。

    set serveroutput on
    
    declare
      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;
    /
    

    生成するもの:

    SQL> set serveroutput on
    SQL>
    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 Value
    Null Value is Null
    
    PL/SQL procedure successfully completed.
    
    SQL>
    

    したがって、期待される出力を生成できる唯一の可能なコードパスは、条件に入る値がfalseの場合です。それがあなたが見ている、または期待しているものではない場合、あなたの手順で、または副作用として何か他のことが起こっているに違いありません。



    1. MyISAMエンジンテーブルリレーション(MySQL)

    2. MySQLとSnowLeopardで繰り返し問題が発生しました-./ibdata1をロックできません、エラー:35

    3. Sqlwhere句が機能しない

    4. nullが挿入されたときにデフォルト値を挿入する