PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

PL/pgSQL exécuter vs exécuter

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

  1. évaluer l'expression 'create table ' || some_var || '(a int)'
  2. si some_var est mytab par exemple, puis exécutez une commande create 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.