创建 SQL 表函数

可随时创建 SQL 表函数。

开始之前

创建 SQL 表函数之前,请确保您具有执行 CREATE FUNCTION(表)语句所需的特权。

限制

请参阅:SQL 函数限制

过程

  1. 定义 CREATE FUNCTION (table) 语句:
    1. 指定函数的名称。
    2. 指定每个输入参数的名称和数据类型。
    3. 指定例程属性。
    4. 指定 RETURNS TABLE 关键字。
    5. 指定用于引入函数体的 BEGIN ATOMIC 关键字。
    6. 指定函数体。
    7. 指定 RETURN 子句,其中指定用于定义要返回的结果集的查询并用方括号括起来。
    8. 指定 END 关键字。
  2. 从受支持接口执行 CREATE FUNCTION (table) 语句。

结果

CREATE FUNCTION (table) 语句应成功执行并且应创建表函数。

示例

示例 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%

下一步做什么

创建表函数后,您可能想要调用该函数以进行测试。