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 22/05/2017 10:26:31

BM
Membre

Passage de parmètre .bat -> .sql

Bonjour,

Je m'excuse par avance, mais je ne sais pas si cette discussion rentre bien dans la bonne section du forum.
Je suis débutant en batch et je me heurte à un soucie. Je souhaite que l'utilisateur de mon .bat rentre des paramètres via son clavier qui seront utilisé en entrée de ma fonction dans le .sql. Je vous mets les parties importantes :

Script_export_demodB.bat


@echo off
:choice
set /P choix=Do you want to start the export files ? Are you sure ? [Y/n]
if /I "%choix%" EQU "Y" goto :export
goto :end


:export
set /P a = Saisissez l'affaire  <!-- paramètre1-->
set /P b = Saisissez le partnumber  <!-- paramètre2-->
set /P c = Saisissez le type  <!-- paramètre3-->
@D:\pfi\postgresql\bin\psql.exe -U databaseuser -d FreqNum -f "%USERPROFILE%\AppData\Local\Temp\Script_export_demodB.sql"


:end


pause
exit


Script_export_demodB.sql


CREATE OR REPLACE FUNCTION test_final (choix_affaire character varyung, choix_partnumber character varying, choix_type character varying) RETURNS varchar  AS $BODY$


...


LANGUAGE plpgsql VOLATILE
COST 100;

SELECT test_final ('CDU', 'C1935DA01', 'text/html');


Je souhaite remplacer 'CDU', 'C1935DA01', 'text/html' par les trois paramètres du .bat (a, b et c).


Serait-il possible de m'aider?


Merci d'avance
Cordialement
BM

Hors ligne

#2 22/05/2017 11:00:26

jmarsac
Membre

Re : Passage de parmètre .bat -> .sql

Bonjour,
Clairement ce n'est pas un problème PL/pgSQL mais plutôt "batch Windows".
Vous devriez arriver à vos fins en utilisant "sed" (voir http://unxutils.sourceforge.net/ ou http://gnuwin32.sourceforge.net/) en insérant la commande sed adéquate avant l'exécution de psql

Hors ligne

#3 22/05/2017 11:15:01

rjuju
Administrateur

Re : Passage de parmètre .bat -> .sql

Vous devriez vous en sortir en utilisant une commande du style

psql --set nom_variable1=valeur1 --set nom_variable2=valeur ... -f fichier.sql 

et en utilisant ensuite « :nom_variable » à la place de votre valeur en dur.

Hors ligne

#4 22/05/2017 11:50:45

jmarsac
Membre

Re : Passage de parmètre .bat -> .sql

rjuju a écrit :

Vous devriez vous en sortir en utilisant une commande du style

psql --set nom_variable1=valeur1 --set nom_variable2=valeur ... -f fichier.sql 

et en utilisant ensuite « :nom_variable » à la place de votre valeur en dur.

Beaucoup plus simple !

Hors ligne

#5 22/05/2017 13:05:53

BM
Membre

Re : Passage de parmètre .bat -> .sql

Pour la proposition suivante :


Script_export_demodB.bat

@echo off
:choice
set /P choix=Do you want to start the export files ? Are you sure ? [Y/n]
if /I "%choix%" EQU "Y" goto :export
goto :end

:export
set /P a = Saisissez l'affaire  <!-- paramètre1-->
set /P b = Saisissez le partnumber  <!-- paramètre2-->
set /P c = Saisissez le type  <!-- paramètre3-->
psql --set param1=%a% --set param2=%b% --set param3=%c% -f "%USERPROFILE%\AppData\Local\Temp\Script_export_demodB.sql"
@D:\pfi\postgresql\bin\psql.exe -U databaseuser -d FreqNum -f "%USERPROFILE%\AppData\Local\Temp\Script_export_demodB.sql"

:end

pause
exit


J'ai l'erreur suivante dans la console du .bat


Do you want to start the export files ? Are you sure ? [Y/n]
Saisissez l'affaire : CDU
Saisissez le partnumber : C19365DA01
Saisissez le type : text/html
'psql' n'est pas reconnu en tant que commande interne ou externe, un programme exécutable ou un fichier de commandes.
Appuyez sur une touchez pour continuer...


Est ce bien dans le .bat que je dois rentrer cette commande ?

Cordialement
BM

Hors ligne

#6 22/05/2017 13:18:42

rjuju
Administrateur

Re : Passage de parmètre .bat -> .sql

BM a écrit :

[...]
psql --set param1=%a% --set param2=%b% --set param3=%c% -f "%USERPROFILE%\AppData\Local\Temp\Script_export_demodB.sql"
@D:\pfi\postgresql\bin\psql.exe -U databaseuser -d FreqNum -f "%USERPROFILE%\AppData\Local\Temp\Script_export_demodB.sql"

Je voulais dire d'ajouter les options "--set nom_param=valeur" à votre commande psql actuelle, pas d'ajouter un nouvel appel.

Hors ligne

#7 22/05/2017 15:04:03

BM
Membre

Re : Passage de parmètre .bat -> .sql

Je m'excuse, mais comprenez bien que j'essaie de comprendre en parallèle.


Tout d'abord, j'ai testé de la façon suivante :


@D:\pfi\postgresql\bin\psql.exe --set param1='CDU' --set param2='C19365DA01' --set param3='text/html' -U databaseuser -d FreqNum -f "%USERPROFILE%\AppData\Local\Temp\Script_export_demodB.sql"


ERREUR :
Do you want to start the export files ? Are you sure ? [Y/n]
Saisissez l'affaire : CDU
Saisissez le partnumber : C19365DA01
Saisissez le type : text/html
psql : attention : option supplémentaire "'CDU'= " ignorée
psql : attention : option supplémentaire "--set= " ignorée
psql : attention : option supplémentaire "param2= " ignorée
psql : attention : option supplémentaire "'C19365DA01' " ignorée
psql : attention : option supplémentaire "--set " ignorée
psql : attention : option supplémentaire "param3= " ignorée
psql : attention : option supplémentaire "'text/html= " ignorée
psql : attention : option supplémentaire "-f " ignorée
psql : attention : option supplémentaire "databaseuser " ignorée
psql : attention : option supplémentaire "-d " ignorée
psql : attention : option supplémentaire "FreqNum " ignorée
psql : attention : option supplémentaire "param2= " ignorée
psql : attention : option supplémentaire "D:\Users\T0147777\AppData\Local\Temp\Script_export_demodB.sql" ignorée
Mot de passe pour le databaseuser : **********
psql (9.3.5)
Attention : l'encodage console (850) diffère de l'encodage Windows (1252).
                Les caractères 8 bits peuvent ne pas fonctionner correctement.
                Voir la section "Notes aux utilisateurs de windows" de la page
                de référence de psql pour les détails.
               

Et dans l'autre cas :


@D:\pfi\postgresql\bin\psql.exe --set param1=%a% --set param2=%b% --set param3=%c% -U databaseuser -d FreqNum -f "%USERPROFILE%\AppData\Local\Temp\Script_export_demodB.sql"


ERREUR :
Do you want to start the export files ? Are you sure ? [Y/n]
Saisissez l'affaire : CDU
Saisissez le partnumber : C19365DA01
Saisissez le type : text/html
Mot de passe pour l'utilisateur databaseuser : ********
Use "CREATE EXTENSION Script_export_demodB" to load this file.
DROP FUNCTION
CREATE FUNCTION
psql: D:\Users\T0147777\AppData\Local\Temp\Script_export_demodB.sql:150: ERREUR: erreur de syntaxe sur ou près de " , "
LIGNE 1 : SELECT test_final (, , );


Appuyez sur une touchez pour continuer...


Cela veut-il dire qu'il ne fait pas la liaison entre les capture de a, b et c précédent, j'ai essayer avec des "set /P %a% = Saisissez l'affaire : " et j'ai le même le résultat.

Cordialement
BM

Hors ligne

#8 22/05/2017 15:59:18

rjuju
Administrateur

Re : Passage de parmètre .bat -> .sql

Voilà en référence un exemple d'utilisation sous linux.  N'ayant pas de windows, je n'ai aucune idée des adpatations que vous devez faire :

$ cat /tmp/toto.sql
select :param1, :param2 ;
$ export val1="'val1'"
$ export val2=42
$ psql --set param1=$val1 --set param2=$val2 -f /tmp/toto.sql
 ?column? | ?column? 
----------+----------
 val1     |       42
(1 row)

Hors ligne

#9 24/05/2017 14:15:18

BM
Membre

Re : Passage de parmètre .bat -> .sql

Bonjour,


J'aimerais savoir où se trouve la rubrique Batch Windows sur le forum, je ne la trouve pas.


Cordialement
BM

Hors ligne

#10 24/05/2017 14:59:42

rjuju
Administrateur

Re : Passage de parmètre .bat -> .sql

Il n'y a pas de sectoin "Batch Windows".  La section la plus appropriée pour ce sujet serait "psql".  Mais à ma connaissance il y a assez peu de personnes utilisant windows qui apportent des réponses ici.

Hors ligne

#11 24/05/2017 15:30:12

jmarsac
Membre

Re : Passage de parmètre .bat -> .sql

Bonjour,

L'équivalent Windows de l'exemple de Julien est (à titi près) si toto.sql est dans c:\temp et si le chemin de psql.exe est dans la variable PATH

set val1='titi'
set val2=42
psql --set param1=%val1%  --set param2=%val2% -f c:/temp/toto.sql
 ?column? | ?column?
----------+----------
 titi     |       42
(1 ligne)

Dernière modification par jmarsac (24/05/2017 15:31:05)

Hors ligne

#12 24/05/2017 17:26:37

jmarsac
Membre

Re : Passage de parmètre .bat -> .sql

Lorsque vous rentrez les valeurs de vos paramètres, il faut saisir les guillemets simples pour les chaines de caractères (ou les mettre dans le fichier.bat) :
.bat

set /P val1=Nom ?
set /P val2=Age ?
psql --set param1=%val1%  --set param2=%val2% -f c:/temp/toto.sql

qui donne :

Nom ?'titi'
Age ?25
psql --set param1=%val1%  --set param2=%val2% -f c:/temp/toto.sql
 ?column? | ?column?
----------+----------
 titi     |       25
(1 ligne)

ou

set /P val1=Nom ?
set /P val2=Age ?
psql --set param1='%val1%'  --set param2=%val2% -f c:/temp/toto.sql

qui donne

Nom ?titi
Age ?25
psql --set param1='%val1%'  --set param2=%val2% -f c:/temp/toto.sql
 ?column? | ?column?
----------+----------
 titi     |       25
(1 ligne)

Dernière modification par jmarsac (25/05/2017 21:08:42)

Hors ligne

Pied de page des forums