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


当前第2页 返回上一页

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

2 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 < 10 LOOP
i = i + 1;
END LOOP;
return i;

3 FOR 循环

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

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

示例

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

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

[ <> ] FOR target IN query LOOP
statements
END LOOP [ label ];

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

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

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

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

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

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

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

CREATE FUNCTION scan_rows(int[]) RETURNS void AS $$
DECLARE
x int[];
BEGIN
FOREACH x SLICE 1 IN ARRAY $1
LOOP
RAISE NOTICE 'row = %', x;
END LOOP;
END;
$$ LANGUAGE plpgsql;

到此这篇关于PgSQL条件语句与循环语句的文章就介绍到这了,更多相关PgSQL条件语句与循环语句内容请搜索

更多SQL内容来自木庄网络博客


打赏

取消

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

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...