保存将refcursor用于表的动态查询的输出

时间:2015-01-08 01:57:08

标签: postgresql plpgsql dynamic-sql create-table

继续a previous case,其中创建了一个使用refcursor 的动态SELECT查询,然后执行了 - 我想问下列内容: 我们从指示的过程获得的期望输出被输出到DataOutput。 我想找到一种方法将数据存储到db中的新表中。

而不是直接的命令:

CREATE TABLE mydaughtertable AS
SELECT enrich_d_dkj_p_k27ac,enrich_lr_dkj_p_k27ac,enrich_r_dkj_p_k27ac
FROM dkj_p_k27ac

想法是运行类似:

CREATE TABLE mydaughtertable AS myresult('dkj_p_k27ac','enri') 

但是这个脚本不正确并且出现以下错误:

ERROR:  syntax error at or near "myresult"
LINE 1: CREATE TABLE mydaughtertable AS myresult('dkj_p_k27ac','enri...
                                        ^
********** Error **********

ERROR: syntax error at or near "myresult"
SQL state: 42601
Character: 33

1 个答案:

答案 0 :(得分:1)

这比上一个问题更容易解决,因为我们在此处不会遇到动态返回类型的问题。您只需要在将查询字符串传递给EXECUTE之前正确连接它。

对于新表

DO
$$
BEGIN
EXECUTE 'CREATE TABLE mydaughtertable AS ' || myresult('dkj_p_k27ac','enri');
END
$$;

myresult(...)返回有效SELECT语句的文本。

要添加到现有表格

...
EXECUTE 'INSERT INTO TABLE mydaughtertable(<colum list>) '
      || myresult('dkj_p_k27ac','enri');
...

如果知道查询的结果类型与表匹配,则可以省略目标列的列表。