金仓数据库KingbaseES PLSQL中条件选择语句介绍
关键字:
PLSQL、条件选择语句、人大金仓、KingbaseES
什么是条件PLSQL中的条件选择语句?
PLSQL中有三类控制语言,条件选择语句、循环语句和顺序控制语句。条件选择语句是PLSQL的控制语言之一。作用是根据不同的数据值运行不同的语句。条件选择语句包括IF语句和CASE语句。
IF语句介绍
IF语句根据条件运行跳过一个或多个语句,有IF THEN、IF THEN ELSE、IF THEN ELIF三种形式。
- IF THEN语句:
- 语法
IF boolean-expression THEN
statements
END IF;
- 功能
如果boolean-expression值为true,执行statements
如果boolean-expression值为false,跳过statements,执行END IF后面的语句。
- 使用示例
当a>b,打印a-b的值
\set SQLTERM /
DECLARE
PROCEDURE p(a int, b int) AS
BEGIN
IF a > b THEN
RAISE NOTICE 'a - b = %', a - b;
END IF;
END;
BEGIN
p(1,2);
p(3,2);
END;
/
执行结果:
- IF TNEN ELSE语句:
- 语法
IF boolean-expression THEN
statements
ELSE
else_statements
END IF;
- 功能
能实现两种判断,如果if后面的值为真,则执行statements,否则执行else_statements。
- 使用示例
当 a 大于 b 时,打印 a - b 的值,当 a 小于等于 b 时,打印 a + b 的值
\set SQLTERM /
DECLARE
PROCEDURE p(a int, b int) AS
BEGIN
IF a > b THEN
RAISE NOTICE 'a - b = %', a - b;
ELSE
RAISE NOTICE 'a + b = %', a + b;
END IF;
END;
BEGIN
p(1, 2);
p(3, 2);
END;
/
执行结果:
- IF TNEN ELIF语句:
- 语法
IF condition_1 THEN
statements_1
ELSIF condition_2 THEN
statements_2
[ ELSIF condition_3 THEN
statements_3
]...
[ ELSE
else_statements
]
END IF;
- 功能
实现多个分支语句,哪个if下的判断条件为真则执行那个判断条件下的语句,如果if和elif下的判断条件都为假,则执行最后一个else下的语句。
- 使用示例
当 a 大于 b 时,打印 a - b 的值,当 a 等于 b 时,打印 ‘a = b’,当 a 小于 b 时,打印 a + b 的值
\set SQLTERM /
DECLARE
PROCEDURE p(a int, b int) AS
BEGIN
IF a > b THEN
RAISE NOTICE 'a - b = %', a - b;
ELSIF a = b THEN
RAISE NOTICE 'a = b';
ELSE
RAISE NOTICE 'a + b = %', a + b;
END IF;
END;
BEGIN
p(1, 2);
p(2, 2);
p(3, 2);
END;
/
\set SQLTERM ;
执行结果:
行级触发器和语句级触发器的区别
- 简单CASE:
- 语法
CASE selector
WHEN selector_value_1 THEN statements_1
WHEN selector_value_2 THEN statements_2
...
WHEN selector_value_n THEN statements_n
[ ELSE
else_statements ]
END CASE;
- 功能
简单 CASE 语句运行 selector_value 等于 selector 的第一条语句,不计算剩余条件。如果没有 selector_value 等于 selector,则 CASE 语句判断是否存在ELSE ,如果存在则运行 else_statements ,否则引发预定义的异常CASE_NOT_FOUND。
- 使用示例
当WHEN后的判定条件与case中的grade值B同时,输出Very Good。
\set SQLTERM /
DECLARE
grade CHAR(1);
BEGIN
grade := 'B';
CASE grade
WHEN 'A' THEN RAISE NOTICE 'Excellent';
WHEN 'B' THEN RAISE NOTICE 'Very Good';
WHEN 'C' THEN RAISE NOTICE 'Good';
WHEN 'D' THEN RAISE NOTICE 'Fair';
WHEN 'F' THEN RAISE NOTICE 'Poor';
ELSE RAISE NOTICE 'No such grade';
END CASE;
END;
/
\set SQLTERM ;
执行结果:
- 搜索CASE:
- 语法
CASE
WHEN condition_1 THEN statements_1
WHEN condition_2 THEN statements_2
...
WHEN condition_n THEN statements_n
[ ELSE
else_statements ]
END CASE;
2.功能
搜索 CASE 语句运行条件为真的第一条语句。不计算剩余条件。如果没有条件为真,则 CASE 语句判断是否存在 ELSE ,如果存在则运行 else_statements ,否则引发预定义的异常CASE_NOT_FOUND
3.使用示例
与简单case逻辑相同
\set SQLTERM /
DECLARE
grade CHAR(1);
BEGIN
grade := 'B';
CASE
WHEN grade = 'A' THEN RAISE NOTICE 'Excellent';
WHEN grade = 'B' THEN RAISE NOTICE 'Very Good';
WHEN grade = 'C' THEN RAISE NOTICE 'Good';
WHEN grade = 'D' THEN RAISE NOTICE 'Fair';
WHEN grade = 'F' THEN RAISE NOTICE 'Poor';
ELSE RAISE NOTICE 'No such grade';
END CASE;
END;
/
\set SQLTERM ;
执行结果:
如果找不到,则会触发预定义异常CASE_NOT_FOUND
\set SQLTERM /
DECLARE
grade CHAR(1);
BEGIN
grade := 'G';
CASE
WHEN grade = 'A' THEN RAISE NOTICE 'Excellent';
WHEN grade = 'B' THEN RAISE NOTICE 'Very Good';
WHEN grade = 'C' THEN RAISE NOTICE 'Good';
WHEN grade = 'D' THEN RAISE NOTICE 'Fair';
WHEN grade = 'F' THEN RAISE NOTICE 'Poor';
END CASE;
EXCEPTION
WHEN CASE_NOT_FOUND THEN
RAISE NOTICE 'No such grade';
END;
/
执行结果: