PERFORM
ist ein plpgsql-Befehl, der für Aufrufe von void-Funktionen verwendet wird. PLpgSQL ist vorsichtig mit nutzlosem SELECT
Anweisungen - die SELECT
ohne INTO
Klausel ist nicht erlaubt. Aber manchmal müssen Sie eine Funktion aufrufen und müssen das Ergebnis nicht speichern (oder Funktionen haben kein Ergebnis). Die Funktion in SQL
wird mit SELECT
aufgerufen Aussage. Aber in PLpgSQL ist das nicht möglich - also der Befehl PERFORM
wurde eingeführt.
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN
RAISE NOTICE 'Hello from void function';
END;
$$ LANGUAGE plpgsql;
-- direct call from SQL
SELECT foo();
-- in PLpgSQL
DO $$
BEGIN
SELECT foo(); -- is not allowed
PERFORM foo(); -- is ok
END;
$$;
Die PERFORM
Anweisungen führen einen Parameter aus und haben das Ergebnis vergessen.
Ihr Beispiel perform 'create table foo as (select 1)';
ist dasselbe wie SELECT 'create table foo as (select 1)'
. Es gibt einen String "create table foo as (select 1)" zurück und dieser String wird verworfen.
Die EXECUTE
Anweisung wertet einen Ausdruck aus, um eine Zeichenfolge zu erhalten. Im nächsten Schritt wird dieser String ausgeführt.
Also EXECUTE 'create table ' || some_var || '(a int)';
hat zwei Schritte
- Auswertungsausdruck
'create table ' || some_var || '(a int)'
- wenn
some_var
beispielsweise mytab ist, führen Sie dann den Befehlcreate table mytab(a int)
aus
Die PERFORM
-Anweisung wird für Funktionsaufrufe verwendet, wenn Funktionen nicht in Zuweisungsanweisung verwendet werden. Die EXECUTE
wird zur Auswertung von dynamischem SQL verwendet - wenn eine Form von SQL-Befehl zur Laufzeit bekannt ist.