Dynamisches SQL (EXECUTE) als Bedingung für IF-Anweisung

7

Ich möchte eine dynamische SQL-Anweisung ausführen, deren zurückgegebener Wert die Bedingung für eine IF -Anweisung ist:

%Vor%

Dies erzeugt den Fehler ERROR: type "execute" does not exist .

Ist es möglich, dies zu tun, oder muss das SQL vor der IF-Anweisung in eine Variable ausgeführt werden, und dann die Variable als bedingte Bedingung?

prüfen?     
Matt 09.12.2011, 17:01
quelle

3 Antworten

19

Dieses Konstrukt ist nicht möglich:

IF EXECUTE 'EXISTS (SELECT 1 FROM mytable)' THEN ...

Sie können vereinfachen:

%Vor%

Aber Ihr Beispiel ist wahrscheinlich nur vereinfacht. Für dynamisches SQL ausgeführt mit EXECUTE , Lesen Sie das Handbuch hier . Sie können nach FOUND nach RETURN QUERY EXECUTE :

suchen %Vor%

Allerdings:

  

Beachten Sie insbesondere, dass EXECUTE die Ausgabe von GET DIAGNOSTICS ändert, aber nicht FOUND .

Kühne Betonung meiner. Für eine einfache EXECUTE stattdessen:

%Vor%

Oder Wenn möglich - insbesondere bei nur einzeiligen Ergebnissen - verwenden Sie INTO -Klausel mit EXECUTE , um direkt von der dynamischen Abfrage ein Ergebnis zu erhalten. Ich zitiere das Handbuch hier :

  

Wenn eine Zeilen- oder Variablenliste angegeben wird, muss sie genau mit der übereinstimmen   Struktur der Abfrage Ergebnisse (wenn eine Datensatzvariable verwendet wird, es   konfiguriert sich selbst, um die Ergebnisstruktur automatisch anzupassen). Ob   Mehrere Zeilen werden zurückgegeben, nur die erste wird der    INTO Variable. Wenn keine Zeilen zurückgegeben werden, wird NULL der INTO zugewiesen   Variable (n).

%Vor%     
Erwin Brandstetter 09.12.2011, 17:26
quelle
4

Matt,

Aus der obigen Syntax schreiben Sie PL / pgSQL, nicht SQL. Bei dieser Annahme gibt es zwei Möglichkeiten, das zu tun, was Sie wollen, aber beide benötigen zwei Codezeilen:

%Vor%

Oder:

%Vor%

"FOUND" ist eine spezielle Variable, die überprüft, ob der letzte Abfrage-Lauf irgendwelche Zeilen zurückgegeben hat.

    
Josh Berkus 09.12.2011 17:43
quelle
-3
%Vor%     
Vijay Mungara 09.06.2015 14:33
quelle

Tags und Links