Ergebnis aus SQL-Abfrage auswerten
Hallo Zusammen!
stehe vor folgendem Problem:
Habe einen SQL-Select Statement. Per Batch wird ein Connect an die DB gemacht und das Select ausgeführt. Das Ergebnis hat 2 Spalten: Datum/Uhrzeit und String. Ich möchte nun das Ergebnis per Script auslesen und abhängig vom Ergebnis andere Batch-Dateien starten:
IF Datum/Uhrzeit schon länger als eine Stunde her (Vergleich mit aktueller Zeit) AND String = 'Text1'
THEN START Programm1.bat
IF Datum/Uhrzeit schon länger als eine Stunde her (Vergleich mit aktueller Zeit) AND String = 'Text2'
THEN START Programm2.bat
Es kann auch sein dass überhaupt keine Datensätze vorhanden sind. Dann soll einfach garnichts passieren.
Bin leider noch ein Laie bei Batch-Programmierung und bei IF-Anweisungen stoss ich schon an meine Grenzen. Ich hoffe Ihr könnt mir dabei helfen.
Ich weiß auch nicht ob das Ergebnis des Selects erst in eine Datei ausgegeben werden muss um es danach auszulesen oder ob es auch anders möglich ist.
stehe vor folgendem Problem:
Habe einen SQL-Select Statement. Per Batch wird ein Connect an die DB gemacht und das Select ausgeführt. Das Ergebnis hat 2 Spalten: Datum/Uhrzeit und String. Ich möchte nun das Ergebnis per Script auslesen und abhängig vom Ergebnis andere Batch-Dateien starten:
IF Datum/Uhrzeit schon länger als eine Stunde her (Vergleich mit aktueller Zeit) AND String = 'Text1'
THEN START Programm1.bat
IF Datum/Uhrzeit schon länger als eine Stunde her (Vergleich mit aktueller Zeit) AND String = 'Text2'
THEN START Programm2.bat
Es kann auch sein dass überhaupt keine Datensätze vorhanden sind. Dann soll einfach garnichts passieren.
Bin leider noch ein Laie bei Batch-Programmierung und bei IF-Anweisungen stoss ich schon an meine Grenzen. Ich hoffe Ihr könnt mir dabei helfen.
Ich weiß auch nicht ob das Ergebnis des Selects erst in eine Datei ausgegeben werden muss um es danach auszulesen oder ob es auch anders möglich ist.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 234284
Url: https://administrator.de/contentid/234284
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
5 Kommentare
Neuester Kommentar
Hi ghostX,
meine Batchfähigkeiten sind zwar auch begrenzt aber kreativ bin ich auch
Und über Datenbankabfragen per Batch habe ich noch nie nachgedacht...
Wie wäre es mit zwei Datenbankabfragen ?
Die erste liest alle Einträge
das zweite liest alle Einträge
Dann hast du zwei Ergebnisse für zwei Aktionen.
Das beschränkt die IF-Bedingung in der Batch nur noch auf ein
Wenn das nicht hilft, musst du wohl erst einmal weiter warten bis sich jemand meldet.
~Arano
[...]
Und wenn man noch
...glaube ich jedenfalls
meine Batchfähigkeiten sind zwar auch begrenzt aber kreativ bin ich auch
Und über Datenbankabfragen per Batch habe ich noch nie nachgedacht...
Wie wäre es mit zwei Datenbankabfragen ?
Die erste liest alle Einträge
WHERE `string`='Text1' AND `date`>now()-3600
unddas zweite liest alle Einträge
WHERE `string`='Text2' AND `date`>now()-3600
Dann hast du zwei Ergebnisse für zwei Aktionen.
Das beschränkt die IF-Bedingung in der Batch nur noch auf ein
IF ergebnis1_anzahl > 0
Wenn das nicht hilft, musst du wohl erst einmal weiter warten bis sich jemand meldet.
~Arano
[...]
Und wenn man noch
GROUP BY
und COUNT()
einarbeitet, müsste sich beide Abfragen wieder in einer vereinen lassen. Welches dann eine Ergebnistabelle liefern sollte die lediglich zwei Datensätze enthält, jeweils die passende Anzahl für die vorkommen von Text1 und Text2....glaube ich jedenfalls
Hallo ghostX,
welche Datenbank (mySQL, Oracle, etc.)?
Könntest Du bitte einen Output deines Statements posten?
Hier habe ich vielleicht etwas, was dir helfen könnte:
So kann der Inhalt in eine beliebige Datei umgeleitet werden (Beispiel bei einer Oracle DB).
Gruß, Sascha
welche Datenbank (mySQL, Oracle, etc.)?
Könntest Du bitte einen Output deines Statements posten?
Hier habe ich vielleicht etwas, was dir helfen könnte:
SQLPLUS SYS/SYS@localhost:1521/db.world as SYSDBA < sqlexec.sql > sql.txt
Gruß, Sascha
Hi,
naja... ich sagte ja, das meine Fähigkeiten dahingehen auch beschränkt seien aber meine Kreativität nicht
Ein Problem wirst du aber selber in die Hand nehmen müssen. Ich verwende eine MySQL-Datenbank ! Konnte das Query also nur dort testen, falls das zum Problem wird - gehört ja mittlerweile auch irgendwie zu Oracel.
Weil ich Debian als Betriebssystem verwende konnte ich jetzt auch nicht viel probieren um die Ausgabe zu parsen - um nicht zu sagen, gar nicht.
Darum habe ich das Query noch weiter umgestrickt:
Neben dem GROUP BY und COUNT(*) habe ich noch ein IF() eingefügt
Ich wollte damit erreichen das wir nur eine Ergebniszeile erhalten, die je nach Anzahl gefundener Datensätze das eine Keyword oder das andere enthält. Findet mein Query keine passenden Datensätze wird allerdings eine leere Ergebnistabelle zurückgegeben. ("Empty set 0,00 sec")
Macht aber nichts, denn wir suchen danach einfach nur nach dem Keyword für gefundene Datensätze - entweder es ist da oder nicht.
Nach dem Query können wir mittels
So liefert die Datenbank dir das Ergebnis das du suchst und die Batch ist furchtbar simpel gehalten
Schönes Wochenende
~Arano
naja... ich sagte ja, das meine Fähigkeiten dahingehen auch beschränkt seien aber meine Kreativität nicht
Ein Problem wirst du aber selber in die Hand nehmen müssen. Ich verwende eine MySQL-Datenbank ! Konnte das Query also nur dort testen, falls das zum Problem wird - gehört ja mittlerweile auch irgendwie zu Oracel.
Weil ich Debian als Betriebssystem verwende konnte ich jetzt auch nicht viel probieren um die Ausgabe zu parsen - um nicht zu sagen, gar nicht.
Darum habe ich das Query noch weiter umgestrickt:
Neben dem GROUP BY und COUNT(*) habe ich noch ein IF() eingefügt
SELECT IF( COUNT(*)=0,
'ES_GIBT_KEINE_TREFFER',
'WIR_HABEN_WAS_GEFUNDEN') as treffer
FROM `ghostx`
WHERE `string`='textA'
AND `date`<NOW()-3600
GROUP BY `string`;
Macht aber nichts, denn wir suchen danach einfach nur nach dem Keyword für gefundene Datensätze - entweder es ist da oder nicht.
Nach dem Query können wir mittels
findstr
in der Ausgabe nach der Zeichenkette "WIR_HABEN_WAS_GEFUNDEN" suchen und dann ganz bequem den %ERRORLEVEL%
auswerten.findstr /C:WIR_HABEN_WAS_GEFUNDEN select-ausgabe-date.txt >nul
if %ERRORLEVEL% == 0 (
REM starte Programm A
)
So liefert die Datenbank dir das Ergebnis das du suchst und die Batch ist furchtbar simpel gehalten
Schönes Wochenende
~Arano