SELECT_anweisung mit Variable

Hallo,

ich möchte in meiner SQL-Funktion eine SELECT-Anweisung mithilfe einer Variablen ausführen, die kurz vorher durch eine andere SELECT-Anweisung mit einem Wert belegt worden ist. Ich habe dazu folgendes geschrieben:

SELECT tablename INTO tab_name FROM tabledatasets WHERE id = table_id;
SELECT zeit INTO start_interval FROM quote_ident(tab_name) ORDER BY zeit DESC;

Nun kommt beim Ausführen der Funktion folgender Fehler:

ERROR: column “zeit” does not exist
SQL Status:42703
Kontext:SQL statement “SELECT zeit FROM quote_ident( $1 ) ORDER BY zeit DESC”
PL/pgSQL function “tabledataset_inserttodatatset_trigger” line 24 at select into variables

Nun hatte ich probiert die 2. Anweisung abzuändern

EXECUTE ''SELECT zeit INTO '' || start_interval || '' FROM '' || quote_ident(tab_name) || '' ORDER BY zeit DESC'';

Fehler:

ERROR: cannot EXECUTE a null querystring
SQL Status:22004
Kontext:PL/pgSQL function “tabledataset_inserttodatatset_trigger” line 24 at execute statement

Eine weitere Änderung zu

PERFORM ''SELECT zeit INTO '' || start_interval || '' FROM '' || quote_ident(tab_name) || '' ORDER BY zeit DESC'';

brachte nun beim Ausführen zwar keinen Fehler mehr, allerdings wurde die Variable start_interval auch nicht mit einem Wert belegt. Ich hoffe mir kann jemand helfen, wie ich erfolgreich der Variable einen Wert aus der SQL-Abfrage zuordnen kann

gruß chuqa

nur kurz, hab nicht viel zeit grad:

  • um dynamisch erzeugte Befehle auszuführen, brauchst Du execute
  • um aus execute etwas in variablen zu bekommen, brauchst du execute … into, was aber erst seit iirc 8.1 funktioniert
  • aufpassen bei strings, die evtl. NULL sein können, dann mit coalesce arbeiten. ich hab nicht genau geschaut, ob das bei dir der fall grad ist, nur als hinweis also


    Andreas

Ah danke, hat schon gereicht, mit

EXECUTE ''SELECT zeit FROM '' || quote_ident(tab_name) || '' ORDER BY zeit DESC'' INTO start_interval;

funktioniert es.

gruß chuqa