文本变量在RECORD类型变量中的postgres访问字段

时间:2019-06-25 08:00:47

标签: postgresql

我在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"

1 个答案:

答案 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