将使用 refcursor 的动态查询的输出保存到 table

Saving the output of a dynamic query that uses refcursor into a table

继续 ,其中创建并执行了使用 refcursor 的动态 SELECT 查询 - 我想问下列的: 我们从指定过程中获得的所需输出被输出到 DataOutput 中。 我想找到一种方法将数据存储到数据库中的新 table 中。

而不是直接的命令:

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

这比您之前的问题更容易解决,因为我们不会在这里遇到动态 return 类型的麻烦。您只需在将查询字符串传递给 EXECUTE.

之前正确连接查询字符串

对于新table:

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

其中 myresult(...) return 是有效 SELECT 语句的文本。

添加到 现有的 table:

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

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