Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 03/05/2017 08:42:39
- BastienM
- Membre
RESOLU : Comparairon colonne/variable Script Postgresql
Bonjour,
Je suis nouveau et je suis confronter à un problème dans un de mes premier script sql.
Voici le détail :
Table : table
id;societe;name
1;DCNS;PrésentationDCNS
2;SNCF;PrésentationSNCF
3;THALES;PrésentationTHALES
4;SDMO;PrésentationSDMO
Je souhaite écrire un script qui quand le technicien rentrera la société voulue, il en aura la présentation. Voici le script :
CREATE OR REPLACE FUNCTION test (selection charater varying) RETURNS AS character varying $BODY$
DECLARE
var varchar;
BEGIN
var := selection;
COPY (SELECT name FROM table WHERE name = var) TO 'D:/_users/BMI/test00.txt';
RETURN var;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
SELECT test('2');
Le problème est la confirmation de l'égalité entre name et var.
Dernière modification par BastienM (03/05/2017 16:19:02)
Hors ligne
#2 03/05/2017 08:43:39
- BastienM
- Membre
Re : RESOLU : Comparairon colonne/variable Script Postgresql
Serait-il possible de m'aider ?
Cordialement
BastienM
Hors ligne
#3 03/05/2017 08:50:03
- Marc Cousin
- Membre
Re : RESOLU : Comparairon colonne/variable Script Postgresql
La fonction doit faire quoi exactement ? Ce n'est pas très clair ?
Vous voulez lui passer un id et qu'elle vous retourne le nom de la société ?
Marc.
Hors ligne
#4 03/05/2017 09:06:32
- BastienM
- Membre
Re : RESOLU : Comparairon colonne/variable Script Postgresql
Je m'excuse, je me suis trompé, je souhaitais mettre SELECT('SNCF');
Le script sql doit retourner donc SNCF et créer un fichier txt qui a écrit à l'intérieur PrésentationSNCF.
Cordialement
BastienM
Hors ligne
#5 03/05/2017 09:25:12
- Marc Cousin
- Membre
Re : RESOLU : Comparairon colonne/variable Script Postgresql
Si on fait abstraction des petites erreurs de syntaxe (je présume que ce n'est pas la fonction de départ), le problème principal, c'est que COPY n'est pas utilisable comme une requête préparée avec des paramètres (contrairement à SELECT, INSERT, UPDATE, DELETE). Il faut donc fabriquer dynamiquement une chaîne et la passer à execute. J'ai changé le chemin vers le fichier étant donné que je suis sur un système Unix:
CREATE OR REPLACE FUNCTION test (selection character varying) RETURNS character varying AS
$BODY$
DECLARE
BEGIN
EXECUTE format('COPY (SELECT name FROM ma_table WHERE societe=%1L) TO ''/tmp/test00.txt''',selection);
RETURN selection;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
;
Je ne sais pas si envoyer les informations dans un fichier texte, c'est une bonne idée, par contre. Ça dépend vraiment de votre cas d'utilisation, mais c'est rare d'en avoir vraiment besoin.
Pour une explication de la fonction format, https://www.postgresql.org/docs/9.5/sta … ING-FORMAT
Marc.
Hors ligne
#6 03/05/2017 13:31:16
- BastienM
- Membre
Re : RESOLU : Comparairon colonne/variable Script Postgresql
Je te remercie. Ça fonctionne, par contre j'aimerais savoir à quoi correspond le %1L (si je met un 2, ça correspond à une deuxième variable d'entrée?) ?
Cordialement
BastienM
PS : comment met-on une discussion en résolu ?
Hors ligne
#7 03/05/2017 14:05:32
- Marc Cousin
- Membre
Re : RESOLU : Comparairon colonne/variable Script Postgresql
%1L c'est pour premier paramètre, L voulant dire que c'est un «litteral», c'est à dire une valeur.
Pour la discussion, change juste le titre
Marc.
Hors ligne