【问题标题】:postgresql dynamic functionpostgresql 动态函数
【发布时间】: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


【解决方案1】:

对于那些感兴趣的人,这里是正确的解决方案:

CREATE OR REPLACE FUNCTION public.afri_terra_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$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多