您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

条件

语法

IF  THEN

;

[{ELSEIF THEN

;}...]

[ELSE

;]

END IF;

语法元素

  ::= 

::=

::= |

::=

::= IS [NOT] NULL

测试 NULL 还是 NOT NULL 。 备注NULL 是所有局部变量的缺省值。

有关如何使用此比较的示例,请参见示例 2。

  ::= < | > | = | <= | >= | != 

::= |

::=[{operator}…]

::= | |

::=+|-|/|*

指定比较值。可基于标量文字或标量变量。

 ::= 

::=

::=

::= !! SQLScript procedural statements

根据先前条件表达式定义要执行的过程语句。

描述

IF 语句由布尔表达式 组成。如果此表达式求值为真,则执行强制 块中的语句 THENIF 语句以 END IF 结尾。其余部分是可选的。

如果布尔表达式 未评估为 true,则对 ELSE-分支进行评估。语句 无需进一步检查即可执行。在 else 分支之后不允许 ELSE-分支或 ELSEIF-分支。

或者,如果使用 ELSEIF 而不是 ELSE,则会对另一个布尔表达式 求值。如果求值为真,则执行语句 。通过这种方式,可以添加任意数量的 ELSEIF 子句。

此语句可用于模拟许多编程语言中已知的 switch-case 语句。

谓词 x [NOT] BETWEEN lower AND upper 也可以在表达式 中使用。其工作方式与 [ NOT ] ( x >= lower AND x <= upper) 相同。有关详细信息,请参阅示例 4。

示例

示例 1

使用 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;

示例 2

使用 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;

示例 3

也可以在 条件中使用标量 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;

示例 4

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;