人大金仓数据库KingbaseES PLSQL中条件选择语句介绍

222 阅读3分钟

金仓数据库KingbaseES PLSQL中条件选择语句介绍

关键字:

PLSQL、条件选择语句、人大金仓、KingbaseES

什么是条件PLSQL中的条件选择语句?

PLSQL中有三类控制语言,条件选择语句、循环语句和顺序控制语句。条件选择语句是PLSQL的控制语言之一。作用是根据不同的数据值运行不同的语句。条件选择语句包括IF语句和CASE语句。

IF语句介绍

IF语句根据条件运行跳过一个或多个语句,有IF THEN、IF THEN ELSE、IF THEN ELIF三种形式。

  • IF THEN语句:
  1. 语法

IF boolean-expression THEN

statements

END IF;

  1. 功能

如果boolean-expression值为true,执行statements

如果boolean-expression值为false,跳过statements,执行END IF后面的语句。

  1. 使用示例

当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;

/

执行结果:

file

  • IF TNEN ELSE语句:
  1. 语法

IF boolean-expression THEN

statements

ELSE

else_statements

END IF;

  1. 功能

能实现两种判断,如果if后面的值为真,则执行statements,否则执行else_statements。

  1. 使用示例

当 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;

/

执行结果:

file

  • IF TNEN ELIF语句:
  1. 语法

IF condition_1 THEN

statements_1

ELSIF condition_2 THEN

statements_2

[ ELSIF condition_3 THEN

statements_3

]...

[ ELSE

else_statements

]

END IF;

  1. 功能

实现多个分支语句,哪个if下的判断条件为真则执行那个判断条件下的语句,如果if和elif下的判断条件都为假,则执行最后一个else下的语句。

  1. 使用示例

当 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 ;

执行结果:

file

行级触发器和语句级触发器的区别

  • 简单CASE:
  1. 语法

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;

  1. 功能

简单 CASE 语句运行 selector_value 等于 selector 的第一条语句,不计算剩余条件。如果没有 selector_value 等于 selector,则 CASE 语句判断是否存在ELSE ,如果存在则运行 else_statements ,否则引发预定义的异常CASE_NOT_FOUND。

  1. 使用示例

当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 ;

执行结果:

file

  • 搜索CASE:
  1. 语法

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 ;

执行结果:

file

如果找不到,则会触发预定义异常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;

/

执行结果:

file

参考资料

《KingbaseES产品手册》 更多信息,参见help.kingbase.com.cn/v8/index.ht…