Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql INSERT INTO查询的动态表名_Postgresql_Function_Insert_Plpgsql_Dynamic Queries - Fatal编程技术网

Postgresql INSERT INTO查询的动态表名

Postgresql INSERT INTO查询的动态表名,postgresql,function,insert,plpgsql,dynamic-queries,Postgresql,Function,Insert,Plpgsql,Dynamic Queries,我试图弄清楚如何将插入到查询中,并将源的表名和列名作为参数 首先,我只是尝试参数化源表名。我编写了以下查询。现在,我直接声明并分配变量tablename的值,但在实际示例中,它将来自其他源/列表。目标表只有一列 CREATE OR REPLACE FUNCTION foo() RETURNS void AS $$ DECLARE tablename text; BEGIN tablename := 'Table_1'; EXECUTE 'INSERT INTO "Schema

我试图弄清楚如何将
插入到
查询中,并将源的表名和列名作为参数

首先,我只是尝试参数化源表名。我编写了以下查询。现在,我直接声明并分配变量
tablename
的值,但在实际示例中,它将来自其他源/列表。目标表只有一列

CREATE OR REPLACE FUNCTION foo()
RETURNS void AS
$$
DECLARE
    tablename text;
BEGIN
   tablename := 'Table_1';
   EXECUTE 'INSERT INTO "Schemaname"."targettable"
   SELECT "Col_A"
   FROM "schemaname".'
   ||quote_ident(tablename);
END
$$ LANGUAGE PLPGSQL;
尽管查询运行时没有任何错误,但目标表中不会反映任何更改。运行查询时,我得到以下输出

查询正常,0行受影响(执行时间:296毫秒;总时间:296毫秒)

我希望更改反映在目标表中。我不知道如何解决这个问题。

已审核的代码 电话:

还有其他方法:


如果您有多个具有相同架构的表,因此它们包含相同的“排序”数据,这通常表示它们应该是一个单独的表,并带有一个附加列,以包含当前可能作为表名的一部分嵌入的数据。也就是说,如果你在为一个组织建模,几乎可以肯定的是,你不应该有
男性员工
女性员工
表格。是否可能
“schemaname”。“Table_1”
没有行?什么是输出:
SELECT count(“Col_A”)FROM“schemaname”。“Table_1”
CREATE OR REPLACE FUNCTION foo()
   RETURNS void AS
$func$
DECLARE
   _tbl text := 'Table_1';  -- or 'table_1'?
BEGIN       
   EXECUTE 'INSERT INTO schemaname.targettable(column_name)
   SELECT  "Col_A"
   FROM    schemaname.' || quote_ident(_tbl);  -- or "Schemaname"?
END
$func$  LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION foo(_tbl text)
   RETURNS void AS
$func$
BEGIN       
   EXECUTE 'INSERT INTO schemaname.targettable(column_name)
   SELECT  "Col_A"
   FROM    schemaname.' || quote_ident(_tbl);
END
$func$  LANGUAGE plpgsql;
SELECT foo('tablename');  -- tablename is case sensitive