IF - ELIF - ELSE 结构

下列 SPL 例程使用 IF - ELIF - ELSE 结构来比较该例程接受的两个参数。

图: 比较两个参数的 IF - ELIF - ELSE 结构。

CREATE FUNCTION str_compare( str1 CHAR(20), str2 CHAR(20))
            RETURNING INTEGER;
            
            DEFINE result INTEGER;
            
            IF str1 > str2 THEN
            LET result = 1;
            ELIF str2 > str1 THEN
            LET result = -1;
            ELSE
            LET result = 0;
            END IF
            RETURN result;
            END FUNCTION;
假设您以下图所示的列定义名为 manager 的表。

图: 定义 manager 表。

CREATE TABLE manager
          (
          mgr_name   VARCHAR(30),
          department VARCHAR(12),
          dept_no    SMALLINT,
          direct_reports SET( VARCHAR(30) NOT NULL ),
          projects LIST( ROW ( pro_name VARCHAR(15),
          pro_members SET( VARCHAR(20) NOT NULL ) )
          NOT NULL),
          salary     INTEGER,
          );
下列 SPL 例程使用 IF - ELIF - ELSE 结构来检查 direct_reports 列中 SET 中元素的数目,并基于该结果来调用不同的外部例程。

图: 检查 SET 中元素数的 IF - ELIF - ELSE 结构。

CREATE FUNCTION checklist( d SMALLINT )
            RETURNING VARCHAR(30), VARCHAR(12), INTEGER;
            
            DEFINE name VARCHAR(30);
            DEFINE dept VARCHAR(12);
            DEFINE num INTEGER;
            
            SELECT mgr_name, department,
            CARDINALITY(direct_reports) 
            FROM manager INTO name, dept, num
            WHERE dept_no = d;
            IF num > 20 THEN
            EXECUTE FUNCTION add_mgr(dept);
            ELIF num = 0 THEN
            EXECUTE FUNCTION del_mgr(dept);
            ELSE
            RETURN name, dept, num;
            END IF;
            
            END FUNCTION;

cardinality() 函数计数集合包含的元素数。要获取更多信息,请参阅 基数函数

SPL 例程中的 IF - ELIF - ELSE 结构有至多下列四个部分:
  • IF THEN 条件

    如果跟在 IF 语句之后的该条件为 TRUE,则例程执行 IF 块中的语句。如果该条件为假,则例程对 ELIF 条件求值。

    IF 语句中的表达式可为任何有效的条件,如 GBase 8s SQL 指南:语法 的 Condition 段描述的那样。要了解 IF 语句的完整语法和详细的讨论,请参阅 GBase 8s SQL 指南:语法

  • 一个或多个 ELIF 条件(可选的)

    仅当 IF 条件为假时,例程才对 ELIF 条件求值。如果 ELIF 条件为真,则例程执行 ELIF 块中的语句。如果 ELIF 条件为假,则例程或对下一个 ELIF 块求值,或执行 ELSE 语句。

  • ELSE 条件(可选的)

    如果 IF 条件和所有 ELIF 条件都为假,则例程执行 ELSE 块中的语句。

  • END IF 语句

    END IF 语句结束该语句块。