Frage ist gelöstVariable aus Batchdatei an MySQL Query übergeben...
21.02.2008
07:43:18 Uhr5801 Aufrufe
6 Antworten
07:43:18 Uhr
6 Antworten
Noch nicht bewertet
Hallo zusammen. Habe mich vor der Anmeldung lange in diesem Forum umgeschaut und auch etliche Zeit "gegoogelt" aber leider nichts passendes Gefunden für mein Problem.
Folgende Ausgangslage:
MySQL 5.0
Windows XP Prof
- anhand eines Batchfiles werden durch den User 2 Variablen definiert. Nennen wir diese
und
- das Batchfile öffnet eine MySQL - Instanz und führt den Query "GET_CUST.sql" aus.
Nun mein Problem:
Wie schaffe ich es, dass die zuvor im Batchfile definierten Variablen im SQL Script verwendet werden können?
Ich freue mich sehr über jegliche Art von Anregungen, Tips und Tricks!
Beste Grüsse aus Helvetien ;)
MySQL 5.0
Windows XP Prof
- anhand eines Batchfiles werden durch den User 2 Variablen definiert. Nennen wir diese
01.
plz_von01.
plz_bis- das Batchfile öffnet eine MySQL - Instanz und führt den Query "GET_CUST.sql" aus.
Nun mein Problem:
Wie schaffe ich es, dass die zuvor im Batchfile definierten Variablen im SQL Script verwendet werden können?
Ich freue mich sehr über jegliche Art von Anregungen, Tips und Tricks!
Beste Grüsse aus Helvetien ;)
solaris-ch schreibt am 21.02.2008 um 08:26:30 Uhr
Hi!
Sorry, wenn ich mich undeutlich ausgedrückt habe.
Anbei der ganze Code.
Was ich möchte ist, die gesetzten Variabeln welche in Zeile 3 und 4 gespeichert werden, an das SQL Script "GENERATE_KML.sql" übergeben, da die Variabeln darin verwendet werden sollen.
Besten Dank für Deine Hilfe!
Sorry, wenn ich mich undeutlich ausgedrückt habe.
Anbei der ganze Code.
Was ich möchte ist, die gesetzten Variabeln welche in Zeile 3 und 4 gespeichert werden, an das SQL Script "GENERATE_KML.sql" übergeben, da die Variabeln darin verwendet werden sollen.
01.
@ ECHO OFF 02.
echo Geben Sie den gewünschten PLZ Bereich ein! 03.
set /p plz_von="PLZ von eingeben: " 04.
set /p plz_bis="PLZ bis eingeben: " 05.
06.
echo Der gewählte Bereich ist: %plz_von% bis %plz_bis% 07.
pause 08.
09.
ECHO Please wait while gathering data... 10.
C:\SOLARIS\bin\mysql.exe -u DBUSER -h localhost DBNAME --password=XXXXXX < SQL\GENERATE_KML.sql 11.
del G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTOLD.kml 12.
rename G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTNEW.kml OUTPUTOLD.kml 13.
move C:\OUTPUTNEW.kml G:\project\Google_map\NEW_GOOGLE\OUTPUT 14.
ECHO FINISHED. Press any key to close this window! 15.
16.
pauseBesten Dank für Deine Hilfe!
Mad Max schreibt am 21.02.2008 um 13:32:25 Uhr
Hallo solaris-ch,
mir fallen da zwei Möglichkeiten ein:
1. die komlette Abfrage wird in der Batchdatei aufgebaut, also
2. in der SQL-Abfrage GET_CUST.sql werden Variablen verwendet, die dann in der Batchdatei deklariert und zugewiesen werden und dann zusammenkopiert. Das Vorgehen könnte interessant sein, wenn die Abfrage etwas komplexer ist.
Abfrage GET_CUST.sql
Batchdatei
Gruß, Mad Max
mir fallen da zwei Möglichkeiten ein:
1. die komlette Abfrage wird in der Batchdatei aufgebaut, also
01.
... 02.
echo select Spalten from Tabelle where PLZ between '%plz_von%' and '%plz_bis%'> GET_CUST.sql 03.
...2. in der SQL-Abfrage GET_CUST.sql werden Variablen verwendet, die dann in der Batchdatei deklariert und zugewiesen werden und dann zusammenkopiert. Das Vorgehen könnte interessant sein, wenn die Abfrage etwas komplexer ist.
Abfrage GET_CUST.sql
01.
select Spalten from Tabelle where PLZ between @plz_von and @plz_bisBatchdatei
01.
... 02.
echo declare @plz_von varchar (10), @plz_bis varchar (10)> GET_CUSTtmp.sql 03.
echo set @plz_von = '%plz_von%', @plz_bis = '%plz_bis%'>> GET_CUSTtmp.sql 04.
copy GET_CUSTtmp.sql + GET_CUST.sql GET_CUSTtmp.sql 05.
...Gruß, Mad Max
solaris-ch schreibt am 21.02.2008 um 13:53:10 Uhr
Hi Mad Max
ich finde Deinen Ansatz sehr gut. Hab das jetzt mal stinkfrech eingebaut.
Leider scheint das nicht zu funzen. Muss ich das 'Haupt' SQL Script nicht noch irgendwie dazu bringen, die Variabeln zu laden?
Jetzt sieht das ganze folgendermassen aus.
Batch File:
und hier das SQL File:
kann es hier leider nicht so schön darstellen, sorry.
Das durch Deinen Beitrag erzeugte temporäre SQL File wird erstellt.
Leider werden die Variabeln wie gesagt nicht an das GENERATE_KML.sql Script übergeben. --> Sorry habe im ersten Post den falschen Scriptnamen verwendet ;)
Besten Dank und Gruss
ich finde Deinen Ansatz sehr gut. Hab das jetzt mal stinkfrech eingebaut.
Leider scheint das nicht zu funzen. Muss ich das 'Haupt' SQL Script nicht noch irgendwie dazu bringen, die Variabeln zu laden?
Jetzt sieht das ganze folgendermassen aus.
Batch File:
01.
@ECHO OFF 02.
03.
echo Geben Sie den gewünschten PLZ Bereich ein! 04.
set /p plz_von="PLZ von eingeben: " 05.
set /p plz_bis="PLZ bis eingeben: " 06.
07.
08.
echo declare @plz_von varchar (10), @plz_bis varchar (10)> GET_CUSTtmp.sql 09.
echo set @plz_von = '%plz_von%', @plz_bis = '%plz_bis%'>> GET_CUSTtmp.sql 10.
copy GET_CUSTtmp.sql + GET_CUST.sql GET_CUSTtmp.sql 11.
12.
13.
echo Der gewählte Bereich ist: %plz_von% bis %plz_bis% 14.
echo Bitte warten Sie, während die gewünschten Daten generiert werden. 15.
16.
C:\SOLARIS\bin\mysql.exe -u root -h localhost solaris --password=pwtta5a9 < SQL\GENERATE_KML.sql 17.
del G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTOLD.kml 18.
rename G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTNEW.kml OUTPUTOLD.kml 19.
move C:\OUTPUTNEW.kml G:\project\Google_map\NEW_GOOGLE\OUTPUT 20.
echo Bitte aktualisieren Sie nun im Google Earth den Netzwerklink (Rechte Maustaste, Menupunkt 'Aktualisieren'... 21.
22.
pauseund hier das SQL File:
01.
WHERE a.CUSTOMERID = b.CUSTOMERID 02.
AND a.STATUS = 'Active' 03.
AND c.PLZ BETWEEN @plz_von AND @plz_bis 04.
AND b.POSTALCODE = c.PLZDas durch Deinen Beitrag erzeugte temporäre SQL File wird erstellt.
Leider werden die Variabeln wie gesagt nicht an das GENERATE_KML.sql Script übergeben. --> Sorry habe im ersten Post den falschen Scriptnamen verwendet ;)
Besten Dank und Gruss
solaris-ch schreibt am 21.02.2008 um 14:21:12 Uhr
Hey Mad Max
sorry! Habs geschafft! Musste Deine Anregungen nur noch ein wenig umbauen.
Für die Nachwelt poste ich hier den Lösungsweg wie man eine Variable aus einem MS DOS Batch File an ein MySQL Query übergibt...:
Hier der Code des Batchfiles:
und hier die code snippets des SQL Scriptes:
Besten, besten Dank an Mad Max, ohne Ihn wäre die Lösung erst gar nicht möglich gewesen!
Grüsse aus Helvetien, solaris
sorry! Habs geschafft! Musste Deine Anregungen nur noch ein wenig umbauen.
Für die Nachwelt poste ich hier den Lösungsweg wie man eine Variable aus einem MS DOS Batch File an ein MySQL Query übergibt...:
Hier der Code des Batchfiles:
01.
@ECHO OFF 02.
03.
echo Geben Sie den gewünschten PLZ Bereich ein! 04.
set /p plz_von="PLZ von eingeben: " 05.
set /p plz_bis="PLZ bis eingeben: " 06.
07.
08.
echo set @plz_von = '%plz_von%', @plz_bis = '%plz_bis%';> GET_CUSTtmp.sql 09.
copy GET_CUSTtmp.sql + SQL\GENERATE_KML.sql SQL\GENERATE_KMLtemp.sql 10.
11.
12.
echo Der gewählte Bereich ist: %plz_von% bis %plz_bis% 13.
echo Bitte warten Sie, während die gewünschten Daten generiert werden. 14.
15.
C:\SOLARIS\bin\mysql.exe -u root -h localhost solaris --password=pwtta5a9 < SQL\GENERATE_KMLtemp.sql 16.
del G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTOLD.kml 17.
rename G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTNEW.kml OUTPUTOLD.kml 18.
move C:\OUTPUTNEW.kml G:\project\Google_map\NEW_GOOGLE\OUTPUT 19.
echo Bitte aktualisieren Sie nun im Google Earth den Netzwerklink (Rechte Maustaste, Menupunkt 'Aktualisieren'... 20.
21.
pauseund hier die code snippets des SQL Scriptes:
01.
WHERE a.CUSTOMERID = b.CUSTOMERID 02.
AND a.STATUS = 'Active' 03.
AND c.PLZ BETWEEN @plz_von AND @plz_bis 04.
AND b.POSTALCODE = c.PLZBesten, besten Dank an Mad Max, ohne Ihn wäre die Lösung erst gar nicht möglich gewesen!
Grüsse aus Helvetien, solaris






