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 Re : PL/pgSQL » Passage de parmètre .bat -> .sql » 24/05/2017 14:15:18

BM

Bonjour,


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


Cordialement
BM

#2 Re : PL/pgSQL » Passage de parmètre .bat -> .sql » 22/05/2017 15:04:03

BM

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

#3 Re : PL/pgSQL » Passage de parmètre .bat -> .sql » 22/05/2017 13:05:53

BM

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

#4 PL/pgSQL » Passage de parmètre .bat -> .sql » 22/05/2017 10:26:31

BM
Réponses : 11

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

#5 Re : PSQL » RESOLU : COPY TO égalité entre colonne et variable » 17/05/2017 08:40:56

BM

Bonjour,


J'ai trouvé la solution. Je la met quand même, si jamais d'autre personne se pose la même question :


CREATE OR REPLACE FUNCTION public.exercice() RETURNS character varying AS $BODY$

DECLARE

a real ;
b real;
c varchar ;

BEGIN

a := (SELECT min(id) FROM table) ;
b := (SELECT min(id) FROM table) ;



FOR i IN a..b LOOP
PERFORM * FROM table WHERE id =  a;
IF FOUND THEN
c:=(SELECT directory FROM table WHERE id=a);
EXECUTE FORMAT ('COPY (SELECT name FROM table WHERE id = %L) TO ''D:/' || c ||'''', a) ;
END IF;
a:=a+1;
END LOOP;

RETURN c ;

END ;

$BODY$
LANGUAGE plpgsql VOLATILE
COST 100 ;


Cordialement
BM

#6 Re : PSQL » RESOLU : COPY TO égalité entre colonne et variable » 16/05/2017 10:22:01

BM

Bonjour gleu,


J'y suis arrivé mais en modifiant un peu mon code je suis arrivé à un autre problème :



Table de test : table


id ;name;directory
7 ;test1;test1.txt
3 ;test2;test2.txt
5 ;test3;test3.txt
2 ;test4;test4.txt
4 ;test5;test5.txt


CREATE OR REPLACE FUNCTION public.exercice() RETURNS character varying AS $BODY$

DECLARE

a real ;
b real;
c varchar ;

BEGIN

a := (SELECT min(id) FROM table) ;
b := (SELECT min(id) FROM table) ;

FOR i IN a..b LOOP
c:=(SELECT directory FROM table WHERE id=a);
EXECUTE FORMAT ('COPY (SELECT name FROM table WHERE id = %L) TO ''D:/' || c ||'''', a) ;
a:=a+1;
END LOOP;

RETURN c ;

END ;

$BODY$
LANGUAGE plpgsql VOLATILE
COST 100 ;


Et j'ai l'erreur suivante :


ERREUR:  l'argument de la requête est NULL
CONTEXT: fonction PL/pgsql exercice(), ligne 13 à l'instruction EXECUTE

********** Erreur **********

ERREUR:  l'argument de la requête est NULL
État SQL :22004
Contexte : fonction PL/pgsql exercice (), ligne 13 à instruction EXECUTE


Il est évident qu'il bloque quand id=(a qui est égale à 6), donc ma question est existe t-il un IF EXISTS qui marche avec une requête dynamique, pur régler ce problème ?


Cordialement
BM

#7 Re : PSQL » RESOLU : COPY TO égalité entre colonne et variable » 15/05/2017 11:06:11

BM

Je vais faire des recherches la dessus et je te recontacte si je bloque.


BM

#8 Re : PSQL » RESOLU : COPY TO égalité entre colonne et variable » 15/05/2017 10:40:59

BM

Bonjour gleu,

Premièrement, je tient à dire que je me suis trompé, ce n'est pas ''D:/test.txt'' mais 'D:/test.txt' cependant mon problème reste le même.
J'ai l'erreur suivante :


ERREUR:  la colonne « a» n'existe pas
LINE 1: COPY (SELECT name FROM table WHERE id = a) TO 'D:/test.txt'
                                                                              ^
QUERY:  COPY (SELECT name FROM table WHERE id = a) TO 'D:/test.txt'
CONTEXT:  fonction PL/pgsql exercice(), ligne 7 à instruction SQL
********** Erreur **********

ERREUR: la colonne « a» n'existe pas
État SQL :42703
Contexte : fonction PL/pgsql exercice (), ligne 7 à instruction SQL


BM

#9 PSQL » RESOLU : COPY TO égalité entre colonne et variable » 14/05/2017 14:42:43

BM
Réponses : 8

Bonjour,


J’ai un problème de compréhension pour détecter une égalité entre une colonne et une variable dans une requête de COPY TO dans un script en langage plpgsql. Pour faire des tests, j’ai fait un petit script :


Table de test : table


id ;name
7 ;test1
3 ;test2
5 ;test3
2 ;test4
4 ;test5


CREATE OR REPLACE FUNCTION public.exercice() RETURNS character varying AS $BODY$


DECLARE


a real ;
b varchar ;


BEGIN


a := (SELECT min(id) FROM table) ;
COPY (SELECT name FROM table WHERE id = a) TO ''D:/test.txt'' ;


b := (SELECT name FROM table WHERE id = a) ;
RETURN b ;


END ;


$BODY$
LANGUAGE plpgsql VOLATILE
COST 100 ;


Le but est de copier le name de l’id le plus faible en prenant en compte que l’on ne le connait pas, c’est pour cela que nous passons par une variable.


Cela est-il possible et pouvez-vous m’aiguiller sur ce sujet?


Cordialement
BM

Pied de page des forums

Propulsé par FluxBB