SQL スカラー関数の作成

データベースを設計するとき、またはアプリケーションを開発するときには、SQL スカラー関数を作成するタスクを実行できます。 SOL スカラー関数を作成する一般的なケースは、複数のアプリケーションの SQL ステートメント内または複数のデータベース・オブジェクト内で参照できるように、再使用可能なロジックをカプセル化すると明らかに役立つような場合です。

始める前に

SQL 関数を作成する前に、
  • SQL 関数 を読んでください
  • SQL 関数のフィーチャー を読んでください
  • CREATE FUNCTION (スカラー) ステートメントの実行に必要な特権があることを確認します。

このタスクについて

制約事項

SQL 関数に関する制約事項を参照してください。

手順

  1. 次のようにして CREATE FUNCTION (スカラー) ステートメントを定義します。
    1. 関数の名前を指定します。
    2. それぞれの入力パラメーターの名前とデータ・タイプを指定します。
    3. RETURNS キーワードと、スカラー戻り値のデータ・タイプを指定します。
    4. 関数本体の導入部として BEGIN キーワードを指定します。 注意すべき点として、新しい関数に BEGIN ATOMIC キーワードを使用することは推奨されません。
    5. 関数本体を指定します。 RETURN 節と、スカラー戻り値または変数を指定します。
    6. END キーワードを指定します。
  2. サポートされるインターフェースから CREATE FUNCTION (スカラー) ステートメントを実行します。

タスクの結果

CREATE FUNCTION (スカラー) ステートメントが正常に実行されると、スカラー関数が作成されます。

例 1
以下は、コンパイルされる SQL 関数の例です。
  CREATE FUNCTION GetPrice (Vendor CHAR(20), Pid INT)         
    RETURNS  DECIMAL(10,3) 
    LANGUAGE SQL  
    MODIFIES SQL
    BEGIN 
      DECLARE price DECIMAL(10,3); 

      IF Vendor = 'Vendor 1' 
        THEN SET price = (SELECT ProdPrice FROM V1Table WHERE Id = Pid); 
      ELSE IF Vendor = 'Vendor 2' 
        THEN SET price = (SELECT Price 
                          FROM V2Table 
    		 		 	  WHERE Pid = GetPrice.Pid); 
      END IF; 
  
    RETURN price; 
  END 

この関数は 2 つの入力パラメーターを取り、入力パラメーター値に基づいて条件付きで決定された単一のスカラー値を戻します。 関数から戻されるまでの間、戻される値を保持するために、price というローカル変数を宣言して使用する必要があります。

例 2
以下の例は、コンパイルされる SQL 関数定義を示しています。 これには、カーソル、条件処理ルーチン・ステートメント、および REPEAT ステートメントが含まれています。
  CREATE FUNCTION exit_func(a INTEGER)
    SPECIFIC exit_func
    LANGUAGE SQL
    RETURNS INTEGER
    BEGIN 
      DECLARE val INTEGER DEFAULT 0;

      DECLARE myint INTEGER DEFAULT 0;

      DECLARE cur2 CURSOR FOR
        SELECT c2 FROM udfd1 
          WHERE c1 <= a 
          ORDER BY c1;

      DECLARE EXIT HANDLER FOR NOT FOUND
        BEGIN
          SIGNAL SQLSTATE '70001' 
          SET MESSAGE_TEXT = 
            'Exit handler for not found fired';
        END;

    OPEN cur2;

    REPEAT
      FETCH cur2 INTO val;
      SET myint = myint + val;
    UNTIL (myint >= a) 
    END REPEAT;

    CLOSE cur2;

    RETURN myint;

  END@

次のタスク

スカラー関数を作成した後、関数を呼び出してテストすることができます。