PgSQL条件语句与循环语句示例代码详解

2022-12-08 0 1,014

目录1 条件语句1.1 elsif可以写多个1.2 LOOP 循环2 WHILE 循环3 FOR 循环

1 条件语句

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

ifif 语句形式包含以下几种: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 $$DECLAREBEGIN– 替换对应if语句END;$$ LANGUAGE plpgsql;IF … THEN … END IF该示例当输入值i大于10时会打印 i的值为:%if i > 10 thenraise notice \’i的值为:%\’, i;end if;IF … THEN … ELSE … END IF

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

if i > 10 thenraise notice \’i的值大于10\’;elseraise notice \’i的值小于等于10\’;end if;IF … THEN … ELSIF … THEN … ELSE … END IF

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

if i > 10 thenraise notice \’i的值大于10\’;elsif i = 5 thenraise notice \’i的值为5\’;elseraise notice \’i的值小于等于10\’;end if;

小提示关键词ELSIF也可以写成ELSEIF。

1.1 elsif可以写多个caseCASE … WHEN … THEN … ELSE … END CASECASE WHEN … THEN … ELSE … END CASE

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

create or replace function test_case(i int) returns void as $$DECLAREBEGIN– 替换对应case语句END;$$ LANGUAGE plpgsql;CASE … WHEN … THEN … ELSE … END CASE该示例当输入值i为1时会打印 i的值为1 ,当输入值为2时会打印 \’i的值为2\’ ,否则会打印 i的值既不为1也不为2case iwhen 1,3 thenraise notice \’i的值为1\’;when 2 thenraise notice \’i的值为2\’;elseraise notice \’i的值既不为1也不为2\’;end case;

小提示如果没有找到匹配,ELSE 语句会被执行如果ELSE不存在,将会抛出一个CASE_NOT_FOUND异常CASE WHEN … THEN … ELSE … END CASEcase when是基于布尔表达式真假来执行该示例当输入值i为0-10之间时会打印 i的值在0-10之间 ,当输入值为11-20之间时会打印 i的值在11-20之间’ ,否则会打印 i的值不在0-20之间

CASEWHEN i BETWEEN 0 AND 10 THENraise notice \’i的值在0-10之间\’;WHEN i BETWEEN 11 AND 20 THENraise notice \’i的值在11-20之间\’;elseraise notice \’i的值不在0-20之间\’;END CASE;

小提示如果没有找到匹配,ELSE 语句会被执行如果ELSE不存在,将会抛出一个CASE_NOT_FOUND异常循环语句

1.2 LOOP 循环[ <> ] LOOPstatementsEND LOOP [ label ];

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

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

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

LOOP– 一些计算i = i + 1;IF i > 10 THENEXIT; — 退出循环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 $$<>DECLAREBEGIN<>DECLAREBEGIN<>DECLAREbeginLOOP– 一些计算i = i + 1;IF i > 10 THENEXIT twoblock; — 退出循环END IF;END LOOP;END;i = 100;END;return i;END;$$ LANGUAGE plpgsql;continueCONTINUE [ label ] [ WHEN boolean-expression ];

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

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

PgSQL条件语句与循环语句示例代码详解

小提示CONTINUE可以被用在所有类型的循环中,它并不限于在LOOP中使用。

2 WHILE 循环[ <> ] WHILE boolean-expression LOOPstatementsEND LOOP [ label ];示例示例函数 test_,将下方示例语句复制到对应位置即可进行测试,下方所有循环都可以使用此函数测试。create or replace function test_(i int) returns int as $$DECLAREBEGIN– 替换对应循环语句END;$$ LANGUAGE plpgsql;该示例输入值为0,判断i的值是否小于10,小于10则执行+1,否则 return 。WHILE i < 10 LOOPi = i + 1;END LOOP;return i;

3 FOR 循环

这种形式的FOR会创建一个在一个整数范围上迭代的循环。变量name会自动定义为类型integer并且只在循环内存在(任何该变量名的现有定义在此循环内都将被忽略)。给出范围上下界的两个表达式在进入循环的时候计算一次。如果没有指定BY子句,迭代步长为 1,否则步长是BY中指定的值,该值也只在循环进入时计算一次。如果指定了REVERSE,那么在每次迭代后步长值会被减除而不是增加。

[ <> ] FOR name IN [ REVERSE ] expression .. expression [ BY expression ] LOOPstatementsEND LOOP [ label ];

示例

FOR i IN 1..10 LOOP– 我在循环中将取值 1,2,3,4,5,6,7,8,9,10END LOOP;FOR i IN REVERSE 10..1 LOOP– 我在循环中将取值 10,9,8,7,6,5,4,3,2,1END LOOP;FOR i IN REVERSE 10..1 BY 2 LOOP– 我在循环中将取值 10,8,6,4,2END LOOP;查询结果循环(FOR…IN… )FOR…IN

通过一个查询的结果进行迭代并且操纵相应的数据。语法是:

[ <> ] FOR target IN query LOOPstatementsEND LOOP [ label ];

target是一个记录变量、行变量或者逗号分隔的标量变量列表。target被连续不断被赋予来自query的每一行,并且循环体将为每一行执行一次。下面是一个例子:

create or replace function test_for_in() returns int as $$DECLAREcddm record;BEGINRAISE NOTICE \’reading jcb_cddm…\’;FOR cddm IN SELECT * FROM jcb_cddm limit 5 LOOPRAISE NOTICE \’场地代码为:%,场地名称为 %\’, cddm.dm, quote_ident(cddm.mc);END LOOP;return 1;END;$$ LANGUAGE plpgsql;

PgSQL条件语句与循环语句示例代码详解

FOR…IN…EXECUTEFOR-IN-EXECUTE语句是在行上迭代的另一种方式,示例如下:该示例将代码作为参数传入,使用using动态替换。

create or replace function test_for_in(dm varchar) returns int as $$DECLAREcddm record;BEGINRAISE NOTICE \’reading jcb_cddm…\’;FOR cddm IN execute \’SELECT * FROM jcb_cddm where dm = $1 limit 5\’ using dm LOOPRAISE NOTICE \’场地代码为:%,场地名称为 %\’, cddm.dm, quote_ident(cddm.mc);END LOOP;return 1;END;$$ LANGUAGE plpgsql;数组循环(FOREACH )FOREACH语法结构如下:[ <> ] FOREACH target [ SLICE number ] IN ARRAY expression LOOPstatementsEND LOOP [ label ];

示例不使用slice该示例使用 select test_sum(array[1,2,3]) 语句测试会返回和为 6

CREATE FUNCTION test_sum(int[]) RETURNS int8 AS $$DECLAREs int8 := 0;x int;BEGINFOREACH x IN ARRAY $1LOOPs := s + x;END LOOP;RETURN s;END;$$ LANGUAGE plpgsql;

slice示例通过一个正SLICE值,FOREACH通过数组的切片而不是单一元素迭代。SLICE值必须是一个不大于数组维度数的整数常量。 target 变量必须是一个数组,并且它接收数组值的连续切片,其中每一个切片都有SLICE指定的维度数。这里是一个通过一维切片迭代的例子:

CREATE FUNCTION scan_rows(int[]) RETURNS void AS $$DECLAREx int[];BEGINFOREACH x SLICE 1 IN ARRAY $1LOOPRAISE NOTICE \’row = %\’, x;END LOOP;END;$$ LANGUAGE plpgsql;

PgSQL条件语句与循环语句示例代码详解

到此这篇关于PgSQL条件语句与循环语句的文章就介绍到这了,更多相关PgSQL条件语句与循环语句内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 PostgreSQL数据库 PgSQL条件语句与循环语句示例代码详解 https://www.u-9.cn/sql/postgresql/6592.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 0 +

    访问总数

  • 0 +

    会员总数

  • 0 +

    文章总数

  • 0 +

    今日发布

  • 0 +

    本周发布

  • 0 +

    运行天数

注册会员,众多资源免费下载