SQL スカラー関数の作成
データベースを設計するとき、またはアプリケーションを開発するときには、SQL スカラー関数を作成するタスクを実行できます。 SOL スカラー関数を作成する一般的なケースは、複数のアプリケーションの SQL ステートメント内または複数のデータベース・オブジェクト内で参照できるように、再使用可能なロジックをカプセル化すると明らかに役立つような場合です。
始める前に
- SQL 関数 を読んでください
- SQL 関数のフィーチャー を読んでください
- CREATE FUNCTION (スカラー) ステートメントの実行に必要な特権があることを確認します。
このタスクについて
制約事項
SQL 関数に関する制約事項を参照してください。手順
タスクの結果
例
- 例 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@