PL/pgSQL effectuer vs exécuter
Quelles sont les différence entre effectuer et de les exécuter sur PL/pgSQL?
À partir de la notice:
Parfois, il est utile pour évaluer une expression ou une requête SELECT, mais jeter le résultat, par exemple lors de l'appel d'une fonction qui a des effets secondaires mais pas de résultats utiles de la valeur. Pour ce faire, dans PL/pgSQL, utilisez la déclaration.
Mais, quand je suis en train d'essayer quelque chose comme:
perform 'create table foo as (select 1)';
Rien ne se passe. Bien que cette requête devrait avoir des effets secondaires (création de la table), et le résultat peut être mis au rebut.
Je crois que j'ai trouvé 1 truc: pour exécuter les fonctions que je peux utiliser:
perform pg_temp.addInheritance(foo);
perform
remplace select
. c'est le choix d'ignorer le retour, vous ne pouvez pas select 'create table foo as (select 1)';
En d'autres termes, il ne peut apporter aucun changement à la base de données?
il peut, de la même façon
select
peut. ni plus ni moins. Par exemple select pg_create_restore_point('change to db');
ou sélectionnez 1 de dblink_exec('local', 'create table...') (i int)` ouOriginalL'auteur Guy s | 2017-03-21
Vous devez vous connecter pour publier un commentaire.
PERFORM
est plpgsql de commande utilisé pour les appels de fonctions void. PLpgSQL est prudent au sujet inutileSELECT
états -SELECT
sansINTO
clause n'est pas autorisé. Mais parfois, vous devez appeler une fonction et que vous n'avez pas besoin de stocker le résultat (ou des fonctions n'a pas toute la suite). La fonction deSQL
est appelée avecSELECT
déclaration. Mais il n'est pas possible en PLpgSQL - donc la commandePERFORM
a été introduit.La
PERFORM
états exécuter un paramètre et j'ai oublié résultat.Votre exemple
perform 'create table foo as (select 1)';
est même comme
SELECT 'create table foo as (select 1)'
. Elle renvoie une chaîne de caractères "create table foo as (select 1)" et cette chaîne est renvoyée.La
EXECUTE
déclaration d'évaluer une expression pour obtenir de chaîne. Dans la prochaine étape de cette chaîne est exécutée.Donc
EXECUTE 'create table ' || some_var || '(a int)';
a deux étapes'create table ' || some_var || '(a int)'
some_var
est mytab par exemple, puis exécuter une commandecreate table mytab(a int)
La
PERFORM
instruction est utilisée pour les appels de fonction, lorsque les fonctions ne sont pas utilisés dans l'instruction d'affectation. LeEXECUTE
est utilisé pour l'évaluation de SQL dynamique - lorsqu'un formulaire de commande SQL est connu au moment de l'exécution.OriginalL'auteur Pavel Stehule
Plus ligne suivante dans docs que vous citez:
Accent mine
execute
à son tour exécute la requête dynamique (même les docs ci-dessus)OriginalL'auteur Vao Tsun