Vous n'êtes pas identifié(e).
Pages : 1
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
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
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.
Julien.
https://rjuju.github.io/
Hors ligne
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
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
[...]
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.
Julien.
https://rjuju.github.io/
Hors ligne
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
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)
Julien.
https://rjuju.github.io/
Hors ligne
Bonjour,
J'aimerais savoir où se trouve la rubrique Batch Windows sur le forum, je ne la trouve pas.
Cordialement
BM
Hors ligne
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.
Julien.
https://rjuju.github.io/
Hors ligne
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
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
Pages : 1