如何在 PostgreSQL 循环中使用 FOREACH
How to use FOREACH in a PostgreSQL LOOP
我正在尝试编写一个非常简单的 pgsql 语句来遍历一个简单的状态缩写数组。
CREATE OR REPLACE FUNCTION my_schema.showState()
RETURNS text AS
$$
DECLARE
my_array text[] := '["az","al", "ak", "ar"]'
BEGIN
FOREACH state IN my_array
LOOP
RETURN SELECT format('%s', state);
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT * FROM showState();
我使用的是 PostgresSQL 版本 11+。我一直收到错误 ERROR: syntax error at or near "BEGIN"
我想在此处看到的输出现在只是看到结果 window 中打印的州缩写。像这样:
我做错了什么?
my_array text[] := '["az","al", "ak", "ar"]'
之后少了一个 ;
。
'["az","al", "ak", "ar"]'
不是有效的数组文字。
- 如果您想要一个集合 returning 函数,您需要将其 return 类型声明为
SETOF
。
FOREACH
的头部缺少 ARRAY
关键字。
state
必须声明。
- 您需要使用
RETURN NEXT ...
将值推入要 returned 的集合。
format()
在这里毫无意义,它没有有效地做任何事情。
通过所有这些纠正,一个人会得到一些类似的东西:
CREATE
OR REPLACE FUNCTION showstate()
RETURNS SETOF text
AS
$$
DECLARE
my_array text[] := ARRAY['az',
'al',
'ak',
'ar'];
state text;
BEGIN
FOREACH state IN ARRAY my_array
LOOP
RETURN NEXT state;
END LOOP;
END;
$$
LANGUAGE plpgsql;
我正在尝试编写一个非常简单的 pgsql 语句来遍历一个简单的状态缩写数组。
CREATE OR REPLACE FUNCTION my_schema.showState()
RETURNS text AS
$$
DECLARE
my_array text[] := '["az","al", "ak", "ar"]'
BEGIN
FOREACH state IN my_array
LOOP
RETURN SELECT format('%s', state);
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT * FROM showState();
我使用的是 PostgresSQL 版本 11+。我一直收到错误 ERROR: syntax error at or near "BEGIN"
我想在此处看到的输出现在只是看到结果 window 中打印的州缩写。像这样:
我做错了什么?
my_array text[] := '["az","al", "ak", "ar"]'
之后少了一个;
。'["az","al", "ak", "ar"]'
不是有效的数组文字。- 如果您想要一个集合 returning 函数,您需要将其 return 类型声明为
SETOF
。 FOREACH
的头部缺少ARRAY
关键字。state
必须声明。- 您需要使用
RETURN NEXT ...
将值推入要 returned 的集合。 format()
在这里毫无意义,它没有有效地做任何事情。
通过所有这些纠正,一个人会得到一些类似的东西:
CREATE
OR REPLACE FUNCTION showstate()
RETURNS SETOF text
AS
$$
DECLARE
my_array text[] := ARRAY['az',
'al',
'ak',
'ar'];
state text;
BEGIN
FOREACH state IN ARRAY my_array
LOOP
RETURN NEXT state;
END LOOP;
END;
$$
LANGUAGE plpgsql;