SQL 表関数の作成

SQL 表関数を作成するタスクは、いつでも実行できます。

始める前に

SQL 表関数を作成する前に、CREATE FUNCTION (表) ステートメントの実行に必要な特権があることを確認してください。

制約事項

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

手順

  1. 次のようにして CREATE FUNCTION (表) ステートメントを定義します。
    1. 関数の名前を指定します。
    2. それぞれの入力パラメーターの名前とデータ・タイプを指定します。
    3. ルーチン属性を指定します。
    4. RETURNS TABLE キーワードを指定します。
    5. 関数本体の導入部として BEGIN ATOMIC キーワードを指定します。
    6. 関数本体を指定します。
    7. RETURN 節と共に括弧を指定し、その中に、戻される結果セットを定義する照会を指定します。
    8. END キーワードを指定します。
  2. サポートされるインターフェースから CREATE FUNCTION (表) ステートメントを実行します。

タスクの結果

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

例 1
以下は、SQL 表関数の例です。 これは、従業員の給与データの更新内容を追跡および監査するために使用されます。

CREATE FUNCTION update_salary  (updEmpNum CHAR(4), amount INTEGER) 
RETURNS TABLE (emp_lastname VARCHAR(10), 
			   emp_firstname VARCHAR(10), 
			   newSalary INTEGER) 
LANGUAGE SQL
MODIFIES SQL DATA
NO EXTERNAL ACTION
NOT DETERMINISTIC
BEGIN ATOMIC

  INSERT INTO audit_table(user, table, action, time)
    VALUES (USER, 'EMPLOYEE',
    'Salary update. Values: ' || updEmpNum || ' ' || char(amount), CURRENT_TIMESTAMP);

  RETURN (SELECT lastname, firstname, salary
    FROM FINAL TABLE(UPDATE employee SET salary = salary + amount WHERE employee.empnum = updEmpNum));

END
この関数は updEmpNum によって指定された従業員の給料を amount で指定された金額で更新し、audit_table という名前の監査表、ルーチンを呼び出したユーザー、変更された表の名前、およびそのユーザーによって作成された変更のタイプも記録します。 FROM 節でデータ変更ステートメントを参照する SELECT ステートメントを使用して、更新された行の値を戻します。
例 2
以下は、SQL 表関数の例です。

CREATE TABLE t1(pk INT, c1 INT, date DATE)

CREATE TABLE t1_archive LIKE T1%

CREATE FUNCTION archive_tbl_t1(ppk INT) 
  RETURNS TABLE(pk INT, c1 INT, date DATE)
LANGUAGE SQL 
MODIFIES SQL DATA 
BEGIN ATOMIC

  DECLARE c1 INT;

  DECLARE date DATE;

  SET (c1, date) = (SELECT c1, date FROM OLD TABLE(DELETE FROM t1 WHERE t1.pk = ppk));

  INSERT INTO T1_ARCHIVE VALUES (ppk, c1, date);

  RETURN VALUES (ppk, c1, date);
END%

次のタスク

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