我有一个postgresql表:
| words | repl |
| word1 | repl1 |
| word2 | repl2 |
| word3 | repl3 |
如何返回一组所有单词并使用存储过程进行repl。
我试试:
create function get_words() returns setof text as
$$
declare
r varchar;
begin
for r in
select word,repl from my_table
loop
return next r;
end loop;
return;
end
$$ language plpgsql;
当我执行它时,我只得到了一句话:
select * from get_words();
get_words
-----------
word1
word2
word3
谢谢。
答案 0 :(得分:1)
您的函数定义为仅返回单个列(returns text
)。此外,您正在读取值的变量也是标量,并且不能包含多个值,因此只有单词列放入r
变量。
您需要将功能更改为例如returns set of my_table
并更改循环变量的定义:
create or replace function get_words()
returns setof my_table as
$$
declare
r words%rowtype;
begin
for r in select w.word, w.repl from my_table w
loop
return next r;
end loop;
return;
end
$$ language plpgsql;
如果您不打算使用return query
在循环中执行任何操作,那么事情会更容易:
create or replace function get_words()
returns table (word text, repl text)
as
$$
begin
return query select w.word, w.repl from words w;
end
$$ language plpgsql;
如果你不使用PL / pgSQL而是使用普通的SQL函数,你可以进一步缩短它:
create or replace function get_words()
returns table (word text, repl text)
as
$$
select w.word, w.repl from words w;
$$ language sql;