変数宣言 (PL/SQL)
通常、ブロック内で使用する変数は、グローバル変数またはパッケージ・レベルの変数でない限り、ブロックの宣言セクションで定義する必要があります。 変数宣言は、その変数に割り当てる名前、およびその変数のデータ・タイプで構成されます。 オプションとして、変数宣言内で変数をデフォルト値に初期設定できます。
構文
説明
- 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 値が含まれます。
例
- 以下のプロシージャーは、ストリング式および数式で構成されたデフォルトを使用する変数宣言を示しています。
このプロシージャーを呼び出すことによって得られる出力例を以下に示します。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 - 以下の例では、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;
