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
- valuta l'espressione
'create table ' || some_var || '(a int)'
- se
some_var
è mytab per esempio, quindi esegui un comandocreate 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.