创建和使用 SPL 例程 / 编写语句块 |
图: 比较两个参数的 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 表。
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, );
图: 检查 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() 函数计数集合包含的元素数。要获取更多信息,请参阅 基数函数。
如果跟在 IF 语句之后的该条件为 TRUE,则例程执行 IF 块中的语句。如果该条件为假,则例程对 ELIF 条件求值。
IF 语句中的表达式可为任何有效的条件,如 GBase 8s SQL 指南:语法 的 Condition 段描述的那样。要了解 IF 语句的完整语法和详细的讨论,请参阅 GBase 8s SQL 指南:语法。
仅当 IF 条件为假时,例程才对 ELIF 条件求值。如果 ELIF 条件为真,则例程执行 ELIF 块中的语句。如果 ELIF 条件为假,则例程或对下一个 ELIF 块求值,或执行 ELSE 语句。
如果 IF 条件和所有 ELIF 条件都为假,则例程执行 ELSE 块中的语句。
END IF 语句结束该语句块。