我正在尝试创建一个像这样的函数:
我尝试将返回类型更改为int或text等,以查看代码是否在该范围之外起作用,但事实并非如此。我是PostgreSQL的初学者,所以如果我错过了明显的内容,请不要苛刻。
create or replace function date_select(i INT) returns void as
$$
begin
select * from dwh_stg.stg_dce_gift where gift_id = i;
end
$$ language plpgsql
select date_select(16940)
SQL错误[42601]:
ERROR: query has no destination for result data
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Where: PL/pgSQL function date_select(integer) line 3 at SQL statement
答案 0 :(得分:1)
如果要返回某些内容,则需要定义该函数以返回某些内容(不是void
)
显然,您想从表stg_dec_gift
返回多行,为此您需要将函数定义为returns setof dwh_stg.stg_dce_gift
。对于封装查询的简单函数,无需使用PL / pgSQL,普通的SQL函数就可以了:
create or replace function date_select(i INT)
returns setof dwh_stg.stg_dce_gift --<< here
as
$$
select *
from dwh_stg.stg_dce_gift
where gift_id = i;
$$
stable
language sql;
然后在FROM
部分中使用它:
select *
from date_select(16940);