solaris-ch
Goto Top

Variable aus Batchdatei an MySQL Query übergeben...

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
plz_von
und
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 ;)

Content-ID: 81265

Url: https://administrator.de/contentid/81265

Ausgedruckt am: 15.11.2024 um 23:11 Uhr

nomax
nomax 21.02.2008 um 08:16:04 Uhr
Goto Top
was meinst du mit variablen?
du redest von den attributen "plz_von" u "plz_bis" oder?

poste doch bitte mal das ganze batchfile.
vl kann ich dir weiter helfen
solaris-ch
solaris-ch 21.02.2008 um 08:26:30 Uhr
Goto Top
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.


@ ECHO OFF
echo Geben Sie den gewünschten PLZ Bereich ein!
set /p plz_von="PLZ von eingeben: "  
set /p plz_bis="PLZ bis eingeben: "  

echo Der gewählte Bereich ist: %plz_von% bis %plz_bis%
pause

ECHO Please wait while gathering data...
C:\SOLARIS\bin\mysql.exe -u DBUSER -h localhost DBNAME  --password=XXXXXX < SQL\GENERATE_KML.sql
del G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTOLD.kml
rename G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTNEW.kml OUTPUTOLD.kml
move  C:\OUTPUTNEW.kml	G:\project\Google_map\NEW_GOOGLE\OUTPUT
ECHO FINISHED. Press any key to close this window!

pause

Besten Dank für Deine Hilfe!
MadMax
MadMax 21.02.2008 um 13:32:25 Uhr
Goto Top
Hallo solaris-ch,

mir fallen da zwei Möglichkeiten ein:
1. die komlette Abfrage wird in der Batchdatei aufgebaut, also
...
echo select Spalten from Tabelle where PLZ between '%plz_von%' and '%plz_bis%'> GET_CUST.sql  
...


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
select Spalten from Tabelle where PLZ between @plz_von and @plz_bis

Batchdatei
...
echo declare @plz_von varchar (10), @plz_bis varchar (10)> GET_CUSTtmp.sql
echo set @plz_von = '%plz_von%', @plz_bis = '%plz_bis%'>> GET_CUSTtmp.sql  
copy GET_CUSTtmp.sql + GET_CUST.sql GET_CUSTtmp.sql
...

Gruß, Mad Max
solaris-ch
solaris-ch 21.02.2008 um 13:53:10 Uhr
Goto Top
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:
@ECHO OFF

echo Geben Sie den gewünschten PLZ Bereich ein!
set /p plz_von="PLZ von eingeben: "  
set /p plz_bis="PLZ bis eingeben: "  


echo declare @plz_von varchar (10), @plz_bis varchar (10)> GET_CUSTtmp.sql
echo set @plz_von = '%plz_von%', @plz_bis = '%plz_bis%'>> GET_CUSTtmp.sql  
copy GET_CUSTtmp.sql + GET_CUST.sql GET_CUSTtmp.sql


echo Der gewählte Bereich ist: %plz_von% bis %plz_bis%
echo Bitte warten Sie, während die gewünschten Daten generiert werden.

C:\SOLARIS\bin\mysql.exe -u root -h localhost solaris  --password=pwtta5a9 < SQL\GENERATE_KML.sql
del G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTOLD.kml
rename G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTNEW.kml OUTPUTOLD.kml
move  C:\OUTPUTNEW.kml	G:\project\Google_map\NEW_GOOGLE\OUTPUT
echo Bitte aktualisieren Sie nun im Google Earth den Netzwerklink (Rechte Maustaste, Menupunkt 'Aktualisieren'...   

pause

und hier das SQL File:
WHERE			 a.CUSTOMERID = b.CUSTOMERID
				AND a.STATUS  = 'Active'  
				AND c.PLZ         BETWEEN @plz_von AND @plz_bis
				AND b.POSTALCODE = c.PLZ
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
solaris-ch
solaris-ch 21.02.2008 um 14:21:12 Uhr
Goto Top
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:
@ECHO OFF

echo Geben Sie den gewünschten PLZ Bereich ein!
set /p plz_von="PLZ von eingeben: "  
set /p plz_bis="PLZ bis eingeben: "  


echo set @plz_von = '%plz_von%', @plz_bis = '%plz_bis%';> GET_CUSTtmp.sql  
copy GET_CUSTtmp.sql + SQL\GENERATE_KML.sql SQL\GENERATE_KMLtemp.sql


echo Der gewählte Bereich ist: %plz_von% bis %plz_bis%
echo Bitte warten Sie, während die gewünschten Daten generiert werden.

C:\SOLARIS\bin\mysql.exe -u root -h localhost solaris  --password=pwtta5a9 < SQL\GENERATE_KMLtemp.sql
del G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTOLD.kml
rename G:\project\Google_map\NEW_GOOGLE\OUTPUT\OUTPUTNEW.kml OUTPUTOLD.kml
move  C:\OUTPUTNEW.kml	G:\project\Google_map\NEW_GOOGLE\OUTPUT
echo Bitte aktualisieren Sie nun im Google Earth den Netzwerklink (Rechte Maustaste, Menupunkt 'Aktualisieren'...   

pause

und hier die code snippets des SQL Scriptes:
WHERE					a.CUSTOMERID	=	b.CUSTOMERID
				AND		a.STATUS			=	'Active'  
				AND		c.PLZ	BETWEEN	@plz_von	AND	@plz_bis
				AND		b.POSTALCODE	=	c.PLZ

Besten, besten Dank an Mad Max, ohne Ihn wäre die Lösung erst gar nicht möglich gewesen!

Grüsse aus Helvetien, solaris
MadMax
MadMax 21.02.2008 um 20:57:14 Uhr
Goto Top
Na, mit dem falschen Namen im ersten Beitrag konnte ich ja nicht rechnen face-wink

Aber freut mich, daß es letztendlich doch hingehauen hat.

Gruß, Mad Max