我在Postgresql中有一个函数,我想从一个表中选择并插入另一个表中。
CREATE OR REPLACE FUNCTION "public"."update_table"("table_name" varchar, "key_col" varchar, "title_col" varchar)
RETURNS "pg_catalog"."bool" AS $BODY$
DECLARE
temprow record;
BEGIN
FOR temprow IN
EXECUTE 'SELECT '|| table_key ||', '|| table_title ||' FROM '|| table_name
LOOP
EXECUTE 'INSERT INTO coding(title, code,"parent_code") VALUES ('|| temprow.title_col ||', '|| temprow.key_col ||', 2);';
END LOOP;
RETURN 't';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
使用key_col变量访问temprow值时出现错误,如何访问此字段?
ERROR: record "temprow" has no field "table_title"
答案 0 :(得分:1)
您不需要循环或临时记录变量,只需使用INSERT ... SELECT
另外:在处理动态SQL时,应始终使用format()
函数和%I
占位符作为表和列名,以正确处理引用。
CREATE OR REPLACE FUNCTION "public"."update_table"("table_name" varchar, "key_col" varchar, "title_col" varchar)
RETURNS "pg_catalog"."bool" AS $BODY$
BEGIN
EXECUTE format('INSERT INTO coding (title, code, "parent_code")
SELECT %I, %I, 2
FROM %I', table_key, table_title, table_name');
RETURN 't';
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100