PL/pgSQL“for 循环”+ select 基本示例(“hello world”)

Fab*_*ert 2 postgresql plpgsql

我使用 Postgres 一段时间了,但对 PL/pgSQL 完全陌生。

\n\n

我正在努力让基本的for 循环发挥作用。

\n\n

这工作正常:

\n\n
-- Without SELECT\nDO $$\nBEGIN \n  FOR counter IN 1..6 BY 2 LOOP\n    RAISE NOTICE 'Counter: %', counter;\n  END LOOP;\nEND; $$;\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我真正想要的是迭代查询的结果SELECT。

\n\n

我一直遇到这个错误:

\n\n
\n

查询错误:错误:行循环的循环变量必须是记录或行变量或标量变量列表

\n
\n\n

对我来说听起来很晦涩,谷歌搜索也没有帮助。

\n\n

我想使用我自己的数据中的一个表(我希望使用 a SELECT * FROM mytable WHERE \xe2\x80\xb9whatever\xe2\x80\xba),但我意识到我什至无法让for 循环处理更简单的 data。

\n\n

拿着它:

\n\n
-- with a SELECT\nDO $$\nBEGIN \nRAISE NOTICE 'Get ready to be amazed\xe2\x80\xa6';\nFOR target IN SELECT * FROM generate_series(1,2) LOOP\n    RAISE NOTICE 'hello'\nEND LOOP;\nEND; $$\n
Run Code Online (Sandbox Code Playgroud)\n\n

这也会产生上述错误。我想打印一个简单的东西来掌握循环语法,例如:

\n\n
\n

你好1
\n你好2

\n
\n\n

我究竟做错了什么?

\n

JGH*_*JGH 10

必须声明迭代器\n

\n\n
DO $$\nDECLARE \n    target record;\nBEGIN \n    RAISE NOTICE 'Get ready to be amazed\xe2\x80\xa6';\n    FOR target IN SELECT * FROM generate_series(1,2) LOOP\n        RAISE NOTICE 'hello';\n    END LOOP;\nEND; $$;\n\nNOTICE:  Get ready to be amazed\xe2\x80\xa6\nNOTICE:  hello\nNOTICE:  hello\n
Run Code Online (Sandbox Code Playgroud)\n