【发布时间】:2021-12-09 23:51:23
【问题描述】:
我正在用参数替换硬编码的名称,并且需要创建一个动态 sql 字符串。无论我做什么,我都没有成功替换子查询中的“param”、“schema”和“tablename_2”。接下来是我的功能,因为它部分工作,然后是我的错误消息。我认为这只是在正确的位置插入正确的引号的问题。任何帮助将不胜感激。
CREATE OR REPLACE FUNCTION public.function_112(schema text, tablename_1 text, tablename_2 text, param integer)
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
EXECUTE 'INSERT INTO ' || quote_ident(schema) || '.' || quote_ident(tablename_1) ||'
("gid", "osm_id", "name", "geom", "line_type")
SELECT ("gid", "osm_id", "name", ST_SetSRID("geom", 4326), param)
FROM ''|| quote_ident(schema) || ''.'' || quote_ident(tablename_2) ||'';'
RETURN;
END
$function$
--> 导致错误信息:
QUERY: INSERT INTO public."National_Grid_multiline"
("gid", "osm_id", "name", "geom", "line_type")
SELECT ("gid", "osm_id", "name", ST_SetSRID("geom", 4326), param)
FROM '|| quote_ident(schema) || '.' || quote_ident(tablename_2) ||';
【问题讨论】:
-
在
FROM之后的部分丢失''。所以:FROM '|| quote_ident(schema) || '.' || quote_ident(tablename_2) ||';'.如果您遵循format中的 Dynamic SQL 示例,生活会更轻松。 -
已经试过了,没有任何运气
-
此外,它也不影响'param'参数。
标签: postgresql function dynamic