SQL プロシージャーの変数 (DECLARE、SET ステートメント)

SQL プロシージャーのローカル変数サポートにより、SQL プロシージャー・ロジックをサポートする SQL 値の割り当てと検索が可能です。

SQL プロシージャーの変数は DECLARE ステートメントを使って定義します。

値は SET ステートメントまたは SELECT INTO ステートメントを使って変数に割り当てることもできますし、変数の宣言時にデフォルト値として割り当てることもできます。 変数には、リテラル、式、照会の結果、および特殊レジスターの値を割り当てることができます。

変数値を SQL プロシージャーのパラメーターに割り当てることができ (SQL プロシージャー内の他の変数)、ルーチン内で実行した SQL ステートメント内のパラメーターとして参照することができます。

以下の例は、変数値のさまざまな割り当ておよび検索方法を示しています。

  CREATE PROCEDURE proc_vars()
  SPECIFIC proc_vars
  LANGUAGE SQL
  BEGIN
     
    DECLARE v_rcount INTEGER;

    DECLARE v_max DECIMAL (9,2);

    DECLARE v_adate, v_another  DATE;    		 

    DECLARE v_total INTEGER DEFAULT 0;           -- (1)

    DECLARE v_rowsChanged BOOLEAN DEFAULT FALSE; -- (2)

    SET v_total = v_total + 1;                   -- (3)
	
    SELECT MAX(salary)                           -- (4)
      INTO v_max FROM employee;  	    		 

    VALUES CURRENT_DATE INTO v_date;             -- (5)

    SELECT CURRENT DATE, CURRENT DATE            -- (6)
         INTO v_adate, v_another
    FROM SYSIBM.SYSDUMMY1;

    DELETE FROM T; 
    GET DIAGNOSTICS v_rcount = ROW_COUNT;        -- (7)

    IF v_rcount > 0 THEN                         -- (8)
      SET is_done = TRUE;
    END IF;
  END

行 (1) にあるように、変数を宣言するときに DEFAULT 節を使ってデフォルト値を指定することができます。 行 (2) は、Boolean データ・タイプの変数 (デフォルト値 FALSE) の宣言を示しています。 行 (3) は、SET ステートメントを使って単一の変数値を割り当てることができることを示しています。 行 (4) が示すように、SELECT または FETCH ステートメントを INTO 節と組み合わせて実行することによって変数を設定することもできます。 行 (5) および (6) は、VALUES INTO ステートメントを使って関数または特殊レジスターを評価して、値を変数または複数の変数に割り当てることができることを示しています。

GET DIAGNOSTICS ステートメントの結果を変数に割り当てることもできます。 GET DIAGNOSTICS は、影響を受ける行 (UPDATE ステートメントの場合は更新される行、DELETE ステートメントの場合は削除される行) の数のハンドルを取得するため、または実行されたばかりの SQL ステートメントの戻り状況を取得するために使用できます。 行 (7) は、直前で実行された DELETE ステートメントによって変更される行数を変数に割り当てる方法を示しています。

行 (8) は、1 つの論理を使用して、変数に割り当てられる値を判別する方法を示しています。 この事例では、前の DELETE ステートメントの一部として行数が変更され、GET DIAGNOSTICS ステートメントの実行により変数 v_rcount にゼロより大きい値が割り当てられた場合、変数 is_done に値 TRUE が割り当てられます。