【问题标题】:Postgresql Dynamic SQL Query [closed]Postgresql 动态 SQL 查询 [关闭]
【发布时间】:2013-05-24 21:37:09
【问题描述】:

我需要动态创建这个查询:

INSERT INTO "calle" (a, b, c, d)
SELECT l.id_localidad, v.tipovial, v.nomvial, v.geom
  FROM "010010001v" AS v,
dblink('dbname=xxx port=xxxx host=xxxxx user=xxx password=xxxxx',
    'SELECT id_localidad
           FROM "localidadesurbanas"
 WHERE cvgeo = ''010010001''')
  AS l(id_localidad integer);

唯一改变的是:

...
FROM "010010001v"
...
WHERE cvgeo = ''010010001''')
...

为:

SELECT tablename
  FROM pg_tables
 WHERE schemaname = 'public'
   AND tablename LIKE '01%v';

"010010001v"
"010010293v"
"010010479v"
...

我希望清楚。 如果可能的话,还有学习 PL/pgSQL 的教程。 谢谢。

【问题讨论】:

  • 最好的 pl/pgsql 教程是 Postgres 文档本身...

标签: sql postgresql dynamic


【解决方案1】:
execute format ($dynamic$
    INSERT INTO "calle" (a, b, c, d)
    SELECT l.id_localidad, v.tipovial, v.nomvial, v.geom
    FROM
        %I AS v,
        dblink(
            'dbname=xxx port=xxxx host=xxxxx user=xxx password=xxxxx',
            '
                SELECT id_localidad
                FROM "localidadesurbanas"
                WHERE cvgeo = $1
            '
        ) AS l(id_localidad integer);
    $dynamic$, '010010001v'
) using '010010001'

execute 仅适用于 plpgsql 函数。我假设你已经有了一个工作函数。

【讨论】:

    猜你喜欢
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2011-02-25
    • 2020-01-19
    相关资源
    最近更新 更多