Postgresql plpgsql游标在unnest函数上
我有一个plpgsql函数,如:Postgresql plpgsql游标在unnest函数上,postgresql,plpgsql,unnest,Postgresql,Plpgsql,Unnest,我有一个plpgsql函数,如: DO $$ DECLARE c_id c.id%TYPE; j_text c.j_options%TYPE; j_option varchar; c1 c%ROWTYPE; begin CREATE TYPE my_row_type AS (c2 TEXT); for --c1 in select c.j_options, c.id from c c c1 in select * from c loop
DO
$$
DECLARE
c_id c.id%TYPE;
j_text c.j_options%TYPE;
j_option varchar;
c1 c%ROWTYPE;
begin
CREATE TYPE my_row_type AS (c2 TEXT);
for
--c1 in select c.j_options, c.id from c c
c1 in select * from c
loop
c_id = c1.id;
for
c2 in select * from unnest(string_to_array(c1.j_options,', '))
loop
raise notice 'Value: %, %', c_id, c2.j_options;
end loop;
end loop;
END
$$ language plpgsql;
我的问题是这一行:
c2 in select * from unnest(string_to_array(c1.j_options,', '))
我运行的示例查询,例如:
select unnest(string_to_array('1.0, 1.2',', '));
返回2行:
1. 1.0
2. 1.2
我需要循环这两行,但不确定这个unnest语句的返回类型应该是什么,或者在declare部分如何声明它
运行脚本时出现的错误:
ERROR: loop variable of loop over rows must be a record or row variable or
list of scalar variables
LINE 18: c2 in select * from unnest(string_to_array(c1.j_...
从下面的答案中,我得到以下错误
ERROR: function string_to_array(bytea, unknown) does not exist
LINE 1: select from unnest(string_to_array(c1.j_options,', '))
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
QUERY: select from unnest(string_to_array(c1.j_options,', '))
我不明白为什么这在脚本中不起作用。它认识到c1.j_options
是bytea
我修改后的脚本是:
for c2 in
select from unnest(string_to_array(c1.j_options,', '))
loop
raise notice '%', c2;
end loop;
根据
string\u to_array
函数签名,它返回文本数组(text[]
),因此c2
应该是text
或varchar
:
do language plpgsql $$
declare
c varchar;
begin
for c in select unnest(string_to_array('1.0, 1.2', ', ')) loop
raise notice '%', c;
end loop;
end; $$;
还有一种特殊的循环类型,用于直接通过数组元素进行迭代:
do language plpgsql $$
declare
c varchar;
begin
foreach c in array string_to_array('1.0, 1.2', ', ') loop
raise notice '%', c;
end loop;
end; $$;
根据
string\u to_array
函数签名,它返回文本数组(text[]
),因此c2
应该是text
或varchar
:
do language plpgsql $$
declare
c varchar;
begin
for c in select unnest(string_to_array('1.0, 1.2', ', ')) loop
raise notice '%', c;
end loop;
end; $$;
还有一种特殊的循环类型,用于直接通过数组元素进行迭代:
do language plpgsql $$
declare
c varchar;
begin
foreach c in array string_to_array('1.0, 1.2', ', ') loop
raise notice '%', c;
end loop;
end; $$;
错误消息是“错误:函数字符串\u到\u数组(bytea,未知)不存在”。bytea类型不是文本,而是二进制值,对于这种类型,没有定义函数字符串\u到\u数组。从bytea到text没有任何默认转换。很难说什么是解决方案,因为bytea可以容纳任何东西。如果有一些文本,则应使用类型“text”,而不是bytea。错误消息是“error:function string\u to\u array(bytea,未知)不存在”。bytea类型不是文本,而是二进制值,对于这种类型,没有定义函数字符串\u到\u数组。从bytea到text没有任何默认转换。很难说什么是解决方案,因为bytea可以容纳任何东西。如果有一些文本,则应使用类型“text”,而不是bytea。尝试了上述操作,但出现错误,无法识别该函数。请参阅上面的我的更新尝试了上面的操作,但出现了一个错误,它无法识别该功能。请参阅我上面的更新尝试
string_到_数组(将_从(c1.j_选项,'utf8'),',')
即使使用utf8,我仍然会收到相同的错误消息:(老实说,这是另一个问题和调查的主题。创建它并为c
表提供DDL。尝试string_到_数组(将_从(c1.j_选项,'utf8'),',',')
即使使用utf8,我仍然会收到相同的错误消息:(老实说,这是另一个问题和调查的主题。创建它并为c
表提供DDL。