创建 SQL 标量函数

设计数据库或开发应用程序时应创建 SQL 标量函数。封装一块可重复使用的逻辑以便可在多个应用程序的 SQL 语句或数据库对象中引用非常有用时,通常会创建 SOL 标量函数。

开始之前

创建 SQL 函数之前:

关于此任务

限制

请参阅:SQL 函数限制

过程

  1. 定义 CREATE FUNCTION (scalar) 语句:
    1. 指定函数的名称。
    2. 指定每个输入参数的名称和数据类型。
    3. 指定 RETURNS 关键字和标量返回值的数据类型。
    4. 指定 BEGIN 关键字以引入函数体。注意:不建议对新函数使用 BEGIN ATOMIC 关键字。
    5. 指定函数体。指定 RETURN 子句和标量返回值或变量。
    6. 指定 END 关键字。
  2. 从受支持接口执行 CREATE FUNCTION (scalar) 语句。

结果

CREATE FUNCTION (scalar) 语句应成功执行,并且应创建标量函数。

示例

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

此函数接收两个输入参数值,并根据输入参数值有条件返回单个标量值。它需要声明并使用局部变量 price 来保存要返回的值直到函数返回。

示例 2
以下示例演示包含游标、条件处理程序语句和 REPEAT 语句的编译型 SQL 函数定义:
  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@

下一步做什么

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