PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#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é ?

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

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

Hors ligne

Pied de page des forums