PL/pgSQL“for循环”+选择基本示例(“hello world”)
Posted
技术标签:
【中文标题】PL/pgSQL“for循环”+选择基本示例(“hello world”)【英文标题】:PL/pgSQL "for loop" + select basic example ("hello world") 【发布时间】:2019-04-11 17:19:18 【问题描述】:我使用 Postgres 已经有一段时间了,但我对 PL/pgSQL 完全陌生。
我正在努力让基本的 for 循环工作。
这很好用:
-- Without SELECT
DO $$
BEGIN
FOR counter IN 1..6 BY 2 LOOP
RAISE NOTICE 'Counter: %', counter;
END LOOP;
END; $$;
但我真正想要的是遍历SELECT
查询的结果。
我一直遇到这个错误:
查询错误:错误:对行进行循环的循环变量必须是记录或行变量或标量变量列表
对我来说听起来很模糊,谷歌搜索也没有帮助。
我想使用我自己的数据中的一个表(我希望使用SELECT * FROM mytable WHERE ‹whatever›
),但我意识到我甚至无法让 for 循环工作使用更简单的数据。
拿着这个:
-- with a SELECT
DO $$
BEGIN
RAISE NOTICE 'Get ready to be amazed…';
FOR target IN SELECT * FROM generate_series(1,2) LOOP
RAISE NOTICE 'hello'
END LOOP;
END; $$
这也会产生上述错误。我想打印一个简单的东西来掌握循环语法,比如:
你好 1 你好 2
我做错了什么?
【问题讨论】:
不幸的是,由于FOR IN SELECT
声明的技术原因,应该声明迭代器。不同于FOR IN interval
,也不同于PL/SQLFOR IN SELECT
。
【参考方案1】:
必须声明迭代器
DO $$
DECLARE
target record;
BEGIN
RAISE NOTICE 'Get ready to be amazed…';
FOR target IN SELECT * FROM generate_series(1,2) LOOP
RAISE NOTICE 'hello';
END LOOP;
END; $$;
NOTICE: Get ready to be amazed…
NOTICE: hello
NOTICE: hello
【讨论】:
如何访问该系列的内容?例如显示“hello 1”,然后显示“hello 2”。 选择SELECT * FROM generate_series(1,2) as "counter"
,然后选择RAISE NOTICE 'hello %', target.counter;
以上是关于PL/pgSQL“for循环”+选择基本示例(“hello world”)的主要内容,如果未能解决你的问题,请参考以下文章
使用 PostgreSQL PL/pgSQL 在 For 循环中添加月份