继续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
答案 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');
...
如果知道查询的结果类型与表匹配,则可以省略目标列的列表。