Prepared Statement in Stored Procedure

Hallo,

ich habe das Problem, ein Prepared Statement nicht in einer Stored Procedure ausführen zu können.

Mein Code sieht folgendermassen aus:

...

PREPARE __insertstatement__ (integer, varchar, varchar) AS
    INSERT INTO analysis.test1 ("id", "value", "kling") VALUES ($1, $2, $3);
            
 WHILE t_min <= t_max LOOP
   ....
  FOR result IN SELECT ...

      EXECUTE __insertstatement__ (1::integer, 'blubb'::varchar,    
                    'klingwlin'::varchar);
  END LOOP;
....
END LOOP;

....

Immer wenn ich die Stored Procedure ausführen möchte, erhalte ich folgende Fehlermeldung:

FEHLER:  Funktion __insertstatement__(integer, character varying, character varying) existiert nicht
LINE 1: SELECT  __insertstatement__ (1, 'blubb'::varchar, 'klingwlin...
                ^
HINT:  Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
QUERY:  SELECT  __insertstatement__ (1, 'blubb'::varchar, 'klingwlin'::varchar)
CONTEXT:  PL/pgSQL function "create_site_stats" line 268 at EXECUTE statement

********** Error **********

FEHLER: Funktion __insertstatement__(integer, character varying, character varying) existiert nicht
SQL state: 42883
Hint: Keine Funktion stimmt mit dem angegebenen Namen und den Argumenttypen überein. Sie müssen möglicherweise ausdrückliche Typumwandlungen hinzufügen.
Context: PL/pgSQL function "create_site_stats" line 268 at EXECUTE statement

Die Argumenttypen sind ordentlich gecastet und der Funktionsnahme ist auch beim Aufruf der Gleiche wie bei der Erstellung des Prepared Statement.

Hat vielleicht irgendjemand eine Idee, was da falsch läuft?

Vielen Dank

Execute innerhalb einer plpgsql-Procedure ist was komplett anderes als das SQL-Execute.

Andreas

Und wie kann ich dann das Prepared Statement in einer Stored Procedure ausführen?

Einfach den Code plain in die Funktion schreiben, das ist dann schon ein Prepared Statement.

Also…bitte einmal zur Erklärung:

(1) Postgres wird doch nicht ein einfaches INSERT Statement selbständig als Prepared Statenent behandeln, oder? Um ein Prepared Statement nutzen zu können, muss man es doch erst erstellen, so dass das System die Checks nur einmal ausführt.

(2) Wenn ich nicht den EXECUTE Befehl nutzen kann, um das Prepared Statement im Body der Stored Procedure auszuführen, wie kann ich es denn dann aufrufen.

Vielen Dank für weitere Antworten

Alle SQL-Anweisungen im Quelltext der Funktion sind automatisch Prepared Queries.


(2) Wenn ich nicht den EXECUTE Befehl nutzen kann, um das Prepared Statement im Body der Stored Procedure auszuführen, wie kann ich es denn dann aufrufen.

WIe gesagt, einfach Anweisung in den Quelltext schreiben.