Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 29/08/2016 09:52:00
- jp
- Membre
[RESOLU] variable externe dans du plpgsql
Bonjour,
J'ai besoin de passer une variable (surement plusieurs à termes) dans un bloc plpgsql.
Mais je n'y arrive pas ! c'est pour ca que je requière votre aide :-)
Voici un exemple pour illustrer mon probleme.
La commande psql que je passe (toujours la meme):
# psql --set vdate_debut=\'01/01/2016\' -f mon_fichier.sql
Contenu de mon_fichier.sql qui fonctionne:
------------------------------------
DROP table ma_table;
CREATE TABLE ma_table (message text) ;
insert into ma_table values (:vdate_debut);
------------------------------------
Ici pas de probleme la valeur est bien insérée.
Contenu de mon_fichier.sql qui ne fonctionne pas:
------------------------------------
DROP table ma_table;
CREATE TABLE ma_table (message date) ;
DO language plpgsql $$
declare
\set ddeb date := to_date(:vdate_debut,'dd/mm/yyyy');
begin
insert into ma_table values (ddeb);
END
$$;
------------------------------------
Ici problème, ddeb n'est meme pas "seté". J'ai essayé plusieurs technique mais je n'y arrive toujours pas.
Est ce que quelqu'un aurai une solution miracle ?
J'ai forcement raté un truc mais n’étant pas tres fort en plpgsql, je ne sais pas quoi.
Merci
Dernière modification par jp (29/08/2016 13:10:36)
Hors ligne
#2 29/08/2016 11:41:09
- gleu
- Administrateur
Re : [RESOLU] variable externe dans du plpgsql
Parce que vous mélangez des trucs qui n'ont rien à voir.
Les méta-commandes \quelquechose sont interprétées par psql uniquement. Or, le contenu d'une fonction ou d'un DO est interprété par le serveur PostgreSQL (et plus exactement par le gestionnaire du langage indiqué). Donc pas étonnant qu'un \set ne fonctionne pas avec pl/pgsql.
Comme une instruction DO n'accepte pas d'argument, la seule solution est de créer une fonction et de mettre votre variable psql comme argument de la nouvelle fonction.
Guillaume.
Hors ligne
#3 29/08/2016 13:09:58
- jp
- Membre
Re : [RESOLU] variable externe dans du plpgsql
Merci !
J'ai compris mon erreur et j'ai suivi vos conseils. Comme ceci tout fonctionne.
----------------------------------------------
DROP table ma_table;
CREATE TABLE ma_table (message date) ;
CREATE OR REPLACE FUNCTION ma_func (date_debut date)
RETURNS text AS $BODY$
declare
begin
insert into ma_table values (date_debut);
return 'insert ok';
end;
$BODY$ LANGUAGE plpgsql;
select ma_func(:vdate_debut);
-----------------------------------------------
Merci encore
Hors ligne
Pages : 1