PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PL/pgSQL eseguire vs eseguire

PERFORM è il comando plpgsql utilizzato per le chiamate di funzioni void. PLpgSQL è attento all'inutile SELECT istruzioni - il SELECT senza INTO la clausola non è consentita. Ma a volte è necessario chiamare una funzione e non è necessario memorizzare il risultato (o le funzioni non hanno alcun risultato). La funzione in SQL viene chiamato con SELECT dichiarazione. Ma non è possibile in PLpgSQL, quindi il comando PERFORM è stato introdotto.

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;
$$;

Il PERFORM le istruzioni eseguono un parametro e hanno dimenticato il risultato.

Il tuo esempio perform 'create table foo as (select 1)';

è uguale a SELECT 'create table foo as (select 1)' . Restituisce una stringa "create table foo as (select 1)" e questa stringa viene eliminata.

Il EXECUTE istruzione valuta un'espressione per ottenere una stringa. Nel passaggio successivo questa stringa viene eseguita.

Quindi EXECUTE 'create table ' || some_var || '(a int)'; ha due passaggi

  1. valuta l'espressione 'create table ' || some_var || '(a int)'
  2. se some_var è mytab per esempio, quindi esegui un comando create table mytab(a int)

Il PERFORM istruzione viene utilizzata per le chiamate di funzione, quando le funzioni non vengono utilizzate nell'istruzione di assegnazione. Il EXECUTE viene utilizzato per la valutazione dell'SQL dinamico - quando una forma di comando SQL è nota in runtime.