2013-05-29 83 views
-1

我需要动态地创建此查询:PostgreSQL的动态SQL查询

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。 谢谢。

+0

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

+0

Postgresql版本? –

回答

0
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函数。我假设你已经有了一个工作功能。