将游标保存在临时表中

时间:2015-01-07 20:11:57

标签: function postgresql cursor plpgsql temporary

我是一个绝对的菜鸟,无法找到这个答案 如何将结果添加到临时表中? 也许你们有一些提示让我改进我的代码?

我在这里用游标创建了一个函数。但我需要:

drop function if exists non_married_presidents();
create or replace function non_married_presidents()
returns varchar as $$
declare
    c_emp cursor for
        select name, birth_year from president
        where id not in(select pres_id from pres_marriage);
begin


    for emp in c_emp loop
        raise notice 'name: %, birth_year: %', emp.name, emp.birth_year;
    end loop;
end;
$$language plpgsql;

呼叫:

select non_married_presidents();

1 个答案:

答案 0 :(得分:0)

你问:

  

如何将结果添加到临时表中?

你可能会过度思考这个问题。只需使用CREATE TEMP TABLE AS ...

即可
CREATE TEMP TABLE tmp_tbl AS
-- INSERT INTO tmp_tbl (name, birth_year) -- or insert into existing table
SELECT name, birth_year FROM president p
WHERE  NOT EXISTS (SELECT 1 FROM pres_marriage WHERE pres_id = p.id);

您不需要光标。这是一个罕见的场合,显式游标将是plpgsql中的最佳选择。

在此期间,NOT IN是最好避免的构造:

相关问题