コマンド行からの SQL プロシージャーの作成

コマンド行を使用して SQL プロシージャーを作成する方がグラフィカル開発環境ツールを使用して作成するよりも速い場合があります。

始める前に

  • ユーザーには、 SQL プロシージャーの CREATE PROCEDURE ステートメントを実行するための特権が必要です。
  • プロシージャーの SQL プロシージャー本体に組み込まれているすべての SQL ステートメントを実行するための特権が必要です。
  • SQL プロシージャーの CREATE PROCEDURE ステートメント内で参照されているデータベース・オブジェクトは、そのステートメントの実行前に存在している必要があります。

手順

  • 次のステップでスクリプトを作成するときに使用する終了文字として、コマンド行プロセッサー (Db2® CLP) のデフォルトの終了文字、つまりセミコロン (';') 以外の代替の終了文字を選択します。

    これが必要なのは、 ルーチンの CREATE ステートメントの本体に組み込まれている SQL ステートメントの終了と、 CREATE PROCEDURE ステートメントそのものの終了を CLP が区別するためです。 SQL ルーチン本体の中に組み込む SQL ステートメントの終了を示すためにはセミコロンを使用し、 CREATE ステートメントそのものの終了を示すためにはその選択した終了文字を使用する必要があります。 また、 CLP スクリプトの中にさらに他の SQL ステートメントを組み込む場合は、 その選択した終了文字でそれらのステートメントの終了を示します。

    例えば、以下の CREATE PROCEDURE ステートメントでは、myCLPscript.db2 という名前の Db2 CLP スクリプトの終了文字として、アットマーク ('@') を使用しています。

        CREATE PROCEDURE UPDATE_SALARY_IF
        (IN employee_number CHAR(6), IN rating SMALLINT)
        LANGUAGE SQL
        BEGIN
          DECLARE not_found CONDITION FOR SQLSTATE '02000';
          DECLARE EXIT HANDLER FOR not_found
             SIGNAL SQLSTATE '20000' SET MESSAGE_TEXT = 'Employee not found';
    
          IF (rating = 1)
            THEN UPDATE employee
              SET salary = salary * 1.10, bonus = 1000
              WHERE empno = employee_number;
          ELSEIF (rating = 2)
            THEN UPDATE employee
              SET salary = salary * 1.05, bonus = 500
              WHERE empno = employee_number;
          ELSE UPDATE employee
              SET salary = salary * 1.03, bonus = 0
              WHERE empno = employee_number;
          END IF;
        END
    @
  • コマンド行から以下の CLP コマンドを使用して、プロシージャーの CREATE PROCEDURE ステートメントを含んだ Db2 CLP スクリプトを実行します。
       db2 -td terminating-character -vf CLP-script-name

    terminating-character は、 実行する CLP スクリプト・ファイル CLP-script-name で使用している終了文字です。

    Db2 CLP オプション -td は、CLP 終止符のデフォルトを terminating-character に再設定するという指定です。 -vf は、CLP のオプションの冗長 (-v) オプションを使用するという指定です。このオプションを指定した場合、スクリプト内の各 SQL ステートメントやコマンドがそれぞれの実行時に画面に表示され、実行結果に関する出力も表示されることになります。 -f オプションは、 コマンドのターゲットがファイルであるという指定です。

    最初のステップで示したスクリプトを実行するには、 システム・コマンド・プロンプトから以下のコマンドを実行します。

       db2 -td@ -vf myCLPscript.db2