我有以下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)
。
答案 0 :(得分:2)
how to prevent a touch event passed to a UIView's superview?中的函数变量和参数 不可见 。 (因此错误消息“列r.a不存在”。)您必须传递值,最好使用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;
但它没有多大意义,因为你可以简单地用EXECUTE
替换它:
CREATE TABLE f_t AS TABLE t;
相关: