IF THEN
;
[{ELSEIF THEN
;}...]
[ELSE
;]
END IF;
::=
::=
::= |
::=
::= IS [NOT] NULL
测试 NULL 还是 NOT NULL 。 备注NULL 是所有局部变量的缺省值。
有关如何使用此比较的示例,请参见示例 2。
::= < | > | = | <= | >= | !=
::= |
::=[{operator}…]
::= | |
::=+|-|/|*
指定比较值。可基于标量文字或标量变量。
::=
::=
::=
::= !! SQLScript procedural statements
根据先前条件表达式定义要执行的过程语句。
IF 语句由布尔表达式 THEN。IF 语句以 END IF 结尾。其余部分是可选的。
如果布尔表达式 true,则对 ELSE-分支进行评估。语句 else 分支之后不允许 ELSE-分支或 ELSEIF-分支。
或者,如果使用 ELSEIF 而不是 ELSE,则会对另一个布尔表达式
此语句可用于模拟许多编程语言中已知的 switch-case 语句。
谓词 x [NOT] BETWEEN lower AND upper 也可以在表达式 NOT ] ( x >= lower AND x <= upper) 相同。有关详细信息,请参阅示例 4。
使用 IF 语句在 SAP HANA 数据库中实施 UPSERT 语句的功能。
CREATE PROCEDURE upsert_proc (IN v_isbn VARCHAR(20))
LANGUAGE SQLSCRIPT AS
BEGIN
DECLARE found INT = 1;
SELECT count(*) INTO found FROM books WHERE isbn = :v_isbn;
IF :found = 0
THEN
INSERT INTO books
VALUES (:v_isbn, 'In-Memory Data Management', 1, 1,
'2011', 42.75, 'EUR');
ELSE
UPDATE books SET price = 42.75 WHERE isbn =:v_isbn;
END IF;
END;
使用 IF 语句检查变量 :found 是否为 NULL。
SELECT count(*) INTO found FROM books WHERE isbn = :v_isbn;
IF :found IS NULL THEN
CALL ins_msg_proc('result of count(*) cannot be NULL');
ELSE
CALL ins_msg_proc('result of count(*) not NULL - as expected');
END IF;
也可以在 条件中使用标量 UDF,如以下示例所示。
CREATE PROCEDURE proc (in input1 INTEGER, out output1 TYPE1)
AS
BEGIN
DECLARE i INTEGER DEFAULT :input1;
IF SUDF(:i) = 1 THEN
output1 = SELECT value FROM T1;
ELSEIF SUDF(:i) = 2 THEN
output1 = SELECT value FROM T2;
ELSE
output1 = SELECT value FROM T3;
END IF;
END;
BETWEEN 运算符的使用
CREATE FUNCTION between_01(x INT)
RETURNS result NVARCHAR(1) AS
BEGIN
IF :x BETWEEN 0 AND 100 THEN
result = 'X';
ELSE
result = 'O';
END IF;
END;