PERFORM
est la commande plpgsql utilisée pour les appels de fonctions void. PLpgSQL fait attention aux SELECT
inutiles déclarations - le SELECT
sans INTO
clause n'est pas autorisée. Mais parfois, vous devez appeler une fonction et vous n'avez pas besoin de stocker le résultat (ou les fonctions n'ont aucun résultat). La fonction en SQL
est appelé avec SELECT
déclaration. Mais ce n'est pas possible dans PLpgSQL - donc la commande PERFORM
a été introduit.
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;
$$;
Le PERFORM
les instructions exécutent un paramètre et oublient le résultat.
Votre exemple perform 'create table foo as (select 1)';
est identique à SELECT 'create table foo as (select 1)'
. Il renvoie une chaîne "create table foo as (select 1)" et cette chaîne est ignorée.
Le EXECUTE
instruction évalue une expression pour obtenir une chaîne. À l'étape suivante, cette chaîne est exécutée.
Donc EXECUTE 'create table ' || some_var || '(a int)';
a deux étapes
- évaluer l'expression
'create table ' || some_var || '(a int)'
- si
some_var
est mytab par exemple, puis exécutez une commandecreate table mytab(a int)
Le PERFORM
L'instruction est utilisée pour les appels de fonction, lorsque les fonctions ne sont pas utilisées dans l'instruction d'affectation. Le EXECUTE
est utilisé pour l'évaluation du SQL dynamique - lorsqu'une forme de commande SQL est connue au moment de l'exécution.