PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PL/pgSQL ausführen vs. ausführen

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

  1. Auswertungsausdruck 'create table ' || some_var || '(a int)'
  2. wenn some_var beispielsweise mytab ist, führen Sie dann den Befehl create 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.