2013-08-19 7 views
30

Ist die Standardaufruffunktion select * from my_function()?Funktionen mit exec aufrufen statt wählen

Ich frage, weil ich eine Funktion aufgebaut habe, die nichts zurückliefert, fügt nur Daten in eine Tabelle und (aus einem SQL Server-Hintergrund) es „fühlt“ seltsam es zu nennen mit select * from...

Ich war erwartete etwas wie exec my_function()

Antwort

32

Verwendung PERFORM Aussage - http://www.postgresql.org/docs/current/static/plpgsql-statements.html

Manchmal ist es nützlich, einen Ausdruck oder eine SELECT-Abfrage aber verwerfen das Ergebnis zu bewerten, zum Beispiel beim Aufruf einer Funktion, die Nebenwirkungen hat, aber keinen nützlichen Ergebniswert. Um dies zu tun in PL/pgSQL, verwenden die PERFORM-Anweisung

so ist es nur

DO $$ BEGIN 
    PERFORM my_function(); 
END $$; 
+12

'PERFORM' ist nur innerhalb von PL/PgSQL gültig. Sie können es nicht eigenständig verwenden. –

+0

Ja, es sollte innerhalb des PL/PgSQL-Blocks oder in Funktion ausgeführt werden, aktualisiert –

14

Sie werden from verwenden, wenn die Funktion einen Satz zurückgibt. Wenn die Funktion void kehrt tun nur

select my_function(); 
27

Ja, das ist der normale Weg, und ja, es ist seltsam.

Normalerweise würden Sie solche Funktionen wie gespeicherte Prozeduren und rufen sie mit dem CALL oder EXECUTE Befehl. PostgreSQL unterstützt keine echten Stored Procedures (mehrere Resultsets, autonome Transaktionen und all das), nur sql-callable benutzerdefinierte Funktionen.

So ist die Problemumgehung zu SELECT function_name() mit der PostgreSQL-Erweiterung Syntax, die FROM oder SELECT 1 FROM function_name(); zu sein (etwas) mehr Standard.

Der ODBC-Treiber, JDBC-Treiber usw. verstehen die Escape-Syntax {call func_name()} und übersetzen sie automatisch in einen zugrunde liegenden SELECT.

Verwandte Themen