変数宣言 (PL/SQL)

通常、ブロック内で使用する変数は、グローバル変数またはパッケージ・レベルの変数でない限り、ブロックの宣言セクションで定義する必要があります。 変数宣言は、その変数に割り当てる名前、およびその変数のデータ・タイプで構成されます。 オプションとして、変数宣言内で変数をデフォルト値に初期設定できます。

構文

構文図を読む構文図をスキップするnameCONSTANTtypeNOT NULL:=DEFAULTexpressionNULL

説明

name
変数に割り当てる識別名を指定します。
CONSTANT
変数値を定数に指定します。 デフォルトの式を割り当てる必要があります。アプリケーション・プログラム内で新規値を変数に割り当てることはできません。
type
変数のデータ・タイプを指定します。
NOT NULL
現在 Db2® では無視されます。 変数宣言で NOT NULL が指定されたルーチンのコンパイルは正常に完了します。 しかし、そのようなルーチンは NOT NULL が指定されていないかのように振る舞います。 NOT NULL と宣言された変数で、NULL 値を禁止するための実行時検査は実行されません。 アプリケーションが PL/SQL 変数で NULL 値を制限することが必要な場合、以下の例を参照してください。
DEFAULT
変数のデフォルト値を指定します。 ブロックが入力されるたびに、このデフォルトは評価されます。 例えば、タイプ DATE の変数に SYSDATE を割り当てた場合、変数は、プロシージャーまたは関数がプリコンパイルされた時刻ではなく、現在の呼び出し時刻に解決されます。
:=
代入演算子は DEFAULT キーワードの同義語です。 しかし、この演算子を expression を付けずに指定した場合、変数は NULL 値に初期設定されます。
expression
ブロックが入力されるときに変数に割り当てられる初期値を指定します。
NULL
SQL 値 NULL を指定します。これには NULL 値が含まれます。

  1. 以下のプロシージャーは、ストリング式および数式で構成されたデフォルトを使用する変数宣言を示しています。
    CREATE OR REPLACE PROCEDURE dept_salary_rpt (
        p_deptno        NUMBER
    )
    IS
        todays_date     DATE := SYSDATE;
        rpt_title       VARCHAR2(60) := 'Report For Department # ' || p_deptno 
        				     || ' on ' || todays_date;
        base_sal        INTEGER := 35525;
        base_comm_rate  NUMBER := 1.33333;
        base_annual     NUMBER := ROUND(base_sal * base_comm_rate, 2);
    BEGIN
        DBMS_OUTPUT.PUT_LINE(rpt_title);
        DBMS_OUTPUT.PUT_LINE('Base Annual Salary: ' || base_annual);
    END;
    このプロシージャーを呼び出すことによって得られる出力例を以下に示します。
    CALL dept_salary_rpt(20);
    
    Report For Department # 20 on 10-JUL-07 16:44:45
    Base Annual Salary: 47366.55
  2. 以下の例では、IS NULL または IS NOT NULL を使用して明示的な検査を追加することによって NULL 値を制限し、必要に応じてエラー・ケースを扱います。
    create table T(col1 integer);
    insert into T values null;
    
    declare
      N integer not null := 0;
      null_variable exception;
    begin
      select col1 into N from T;
      if N is null then
        raise null_variable;
      end if;
    exception
      when null_variable then
        -- Handle error condition here.
        dbms_output.put_line('Null variable detected');
    end;