plpgsql系列教程(5)

您所在的位置:网站首页 循环变量count plpgsql系列教程(5)

plpgsql系列教程(5)

2023-12-22 09:03| 来源: 网络整理| 查看: 265

本文由 @小刘先森 原创,转载请注明出处。

plpgsql系列文章,方便小伙伴们学习。

PL/pgSQL从入门到放弃(1)-入门 PL/pgSQL从入门到放弃(2)-变量定义与数据类型 PL/pgSQL从入门到放弃(3)-函数 PL/pgSQL从入门到放弃(4.1)-函数返回常用数据类型——组合数据类型 PL/pgSQL从入门到放弃(4.2)-函数返回常用数据类型——行数据类型 PL/pgSQL从入门到放弃(4.3)-函数返回常用数据类型——记录数据类型 PL/pgSQL从入门到放弃(4.4)-函数返回常用数据类型——复制数据类型 PL/pgSQL从入门到放弃(5)-条件语句与循环语句 PL/pgSQL从入门到放弃(6)-游标

条件语句

PL/pgSQL中有两种条件语句分别为if与case语句。

if

if语句形式包含以下几种:

IF … THEN … END IFIF … THEN … ELSE … END IFIF … THEN … ELSIF … THEN … ELSE … END IF

示例 示例函数 test_if,将下方示例语句复制到对应位置即可进行测试。

create or replace function test_if(i int) returns void as $$ DECLARE BEGIN -- 替换对应if语句 END; $$ LANGUAGE plpgsql; IF … THEN … END IF

该示例当输入值i大于10时会打印i的值为:%

if i > 10 then raise notice 'i的值为:%', i; end if; IF … THEN … ELSE … END IF

该示例当输入值i大于10时会打印i的值大于10否则会打印i的值小于等于10

if i > 10 then raise notice 'i的值大于10'; else raise notice 'i的值小于等于10'; end if; IF … THEN … ELSIF … THEN … ELSE … END IF

该示例当输入值i大于10时会打印i的值大于10,当输入值为5时会打印'i的值为5',否则会打印i的值小于等于10

if i > 10 then raise notice 'i的值大于10'; elsif i = 5 then raise notice 'i的值为5'; else raise notice 'i的值小于等于10'; end if;

小提示

关键词ELSIF也可以写成ELSEIF。elsif可以写多个 case CASE ... WHEN ... THEN ... ELSE ... END CASE CASE WHEN ... THEN ... ELSE ... END CASE

示例 示例函数 test_case,将下方示例语句复制到对应位置即可进行测试。

create or replace function test_case(i int) returns void as $$ DECLARE BEGIN -- 替换对应case语句 END; $$ LANGUAGE plpgsql; CASE … WHEN … THEN … ELSE … END CASE

该示例当输入值i为1时会打印i的值为1,当输入值为2时会打印'i的值为2',否则会打印i的值既不为1也不为2

case i when 1,3 then raise notice 'i的值为1'; when 2 then raise notice 'i的值为2'; else raise notice 'i的值既不为1也不为2'; end case;

小提示

如果没有找到匹配,ELSE 语句会被执行如果ELSE不存在,将会抛出一个CASE_NOT_FOUND异常 CASE WHEN … THEN … ELSE … END CASE

case when是基于布尔表达式真假来执行

该示例当输入值i为0-10之间时会打印i的值在0-10之间,当输入值为11-20之间时会打印i的值在11-20之间',否则会打印i的值不在0-20之间

CASE WHEN i BETWEEN 0 AND 10 THEN raise notice 'i的值在0-10之间'; WHEN i BETWEEN 11 AND 20 THEN raise notice 'i的值在11-20之间'; else raise notice 'i的值不在0-20之间'; END CASE;

小提示

如果没有找到匹配,ELSE 语句会被执行如果ELSE不存在,将会抛出一个CASE_NOT_FOUND异常 循环语句 LOOP循环 [ ] LOOP statements END LOOP [ label ];

LOOP定义一个无条件的循环,它会无限重复直到被EXIT或RETURN语句终止。可选的label可以被EXIT和CONTINUE语句用在嵌套循环中指定这些语句引用的是哪一层循环。 示例 示例函数 test_loop,将下方示例语句复制到对应位置即可进行测试。

create or replace function test_loop(i int) returns int as $$ DECLARE BEGIN -- 替换对应loop语句 END; $$ LANGUAGE plpgsql; exit 退出

该示例首先对i的值加1,如果i的值大于10则退出循环,执行return语句返回结果。输入i的值为0时,返回结果11,输入i的值为20时,返回结果21。

LOOP -- 一些计算 i = i + 1; IF i > 10 THEN EXIT; -- 退出循环 END IF; END LOOP; return i; exit when 退出

该示例与上方示例效果一样。

LOOP -- 一些计算 i = i + 1; EXIT WHEN i > 10; -- 和前一个例子相同的结果 END LOOP; return i; exit [lable]

该示例执行select test_loop(0)时输出结果为11,而不是100。当exit指定退出标签时,会退出整个块语句继续执行,以下示例退出twoblock,执行return语句,所以该值为11;

create or replace function test_loop(i int) returns int as $$ DECLARE BEGIN DECLARE BEGIN DECLARE begin LOOP -- 一些计算 i = i + 1; IF i > 10 THEN EXIT twoblock; -- 退出循环 END IF; END LOOP; END; i = 100; END; return i; END; $$ LANGUAGE plpgsql; continue CONTINUE [ label ] [ WHEN boolean-expression ];

该示例会打印输出i的值,其中当i的值为5时,不会打印。

LOOP i = i + 1; EXIT WHEN i > 10; CONTINUE WHEN i = 5; raise notice 'i的值为:%',i; END LOOP;

continue结果 小提示

CONTINUE可以被用在所有类型的循环中,它并不限于在LOOP中使用。 WHILE循环 [ ] WHILE boolean-expression LOOP statements END LOOP [ label ];

示例 示例函数 test_,将下方示例语句复制到对应位置即可进行测试,下方所有循环都可以使用此函数测试。

create or replace function test_(i int) returns int as $$ DECLARE BEGIN -- 替换对应循环语句 END; $$ LANGUAGE plpgsql;

该示例输入值为0,判断i的值是否小于10,小于10则执行+1,否则return。

WHILE i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3