Re: FOR-LOOP durch eine Ergebnismenge

From: Martin Spott <Martin(dot)Spott(at)mgras(dot)net>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: FOR-LOOP durch eine Ergebnismenge
Date: 2013-03-29 20:35:52
Message-ID: kj4tv6$p036$1@osprey.mgras.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Andreas Kretschmer wrote:

> execute 'select * from ' || layer || ';';
>
> *untested*

.... aber schon nah dran ! ;-)
Wenn ich im FOR nur die gesuchte Spalte selektiere, wie beschrieben
als:

FOR layer IN SELECT f_table_name FROM geometry_columns WHERE f_table_name LIKE 'clc06_sand'

dann kriege ich mit dem obigen EXECUTE beim Aufruf der Funktion den
Fehler:

psql:testproc.sql:18: ERROR: syntax error at or near ")"
ZEILE 1: SELECT * FROM (clc06_sand);

Wenn ich aber den kompletten Record aus der View selektiere:

FOR layer IN SELECT * FROM geometry_columns WHERE f_table_name LIKE 'clc06_sand'

dann kann ich im EXECUTE mittels "layer.f_table_name" (anstelle nur von
"layer") wie gewuenscht damit operieren. Leider muss ich mir letztlich
doch was anderes ueberlegen, denn bei:

EXECUTE 'SELECT * INTO test FROM ' || layer.f_table_name || ';';

kriege ich letztlich:

psql:testproc.sql:18: ERROR: EXECUTE of SELECT ... INTO is not implemented
TIP: You might want to use EXECUTE ... INTO or EXECUTE CREATE TABLE ... AS instead.

Dennoch vielen Dank fuer den zielfuehrenden Hinweis, der Versuch mit

EXECUTE 'CREATE TABLE test AS SELECT * FROM ' || layer.f_table_name || ';';

fuehrte letztlich zum gewuenschten Ergebnis !

Martin.
--
Unix _IS_ user friendly - it's just selective about who its friends are !
--------------------------------------------------------------------------

In response to

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Andreas Kretschmer 2013-03-30 07:36:46 Re: FOR-LOOP durch eine Ergebnismenge
Previous Message Andreas Kretschmer 2013-03-29 18:05:32 Re: FOR-LOOP durch eine Ergebnismenge