gpt4 book ai didi

postgresql - 无法在 plpgsql 函数中将变量与 EXECUTE 命令一起使用

转载 作者:行者123 更新时间:2023-11-29 12:53:21 25 4
gpt4 key购买 nike

我有以下 plpgsql 代码。我正在尝试使用 r.a 作为要插入到我的新表中的字段之一,但它返回的错误是 r.a 列不存在。

create or replace function function1() returns void as $$
declare r t%rowtype;
begin
EXECUTE format('CREATE TABLE f_t(a INT, b INT)');
for r in select * from t
LOOP
EXECUTE format('INSERT INTO f_t(a, b) values (r.a, r.b)');
END LOOP;
RETURN;
end

t的结构也是(a int,b int)

最佳答案

函数变量和参数在 EXECUTE不可见 . (因此出现错误消息 “column r.a does not exist”。)您必须传递值,最好使用 USING 子句。这将工作:

CREATE OR REPLACE FUNCTION function1()
RETURNS void AS
$func$
DECLARE
r t%rowtype;
BEGIN
EXECUTE format('CREATE TABLE f_t(a INT, b INT)');
FOR r IN
SELECT * FROM t
LOOP
EXECUTE format('INSERT INTO f_t(a, b) SELECT $1.*') -- !!
USING r;
END LOOP;
RETURN;
END
$func$ LANGUAGE plpgsql;

但这并没有多大意义,因为您可以简单地将其替换为 CREATE TABLE AS :

CREATE TABLE f_t AS TABLE t;

相关:

关于postgresql - 无法在 plpgsql 函数中将变量与 EXECUTE 命令一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49002054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com