2017-11-29 8 views
1

Ich weiß nicht, die Batch-Struktur und verzeihen Sie mir, wenn diese Fragen ist Rivalen. Ich habe meine Abfrage und ich möchte sie in ein Skript mit sqlplus-Befehl ausführen. Danach, wenn mein sqlplus Befehl mir ein Ergebnis gibt, möchte ich den Datensatz in einer Variablen speichern und der letzte Schritt ist eine Mail mit mailto Befehl zu erstellen und an meinen Kontakt zu senden.Nehmen Sie das Ergebnis von sqlplus und setzen Sie eine Variable auf Skript .bat

mein Skript ist diese:

ScriptFather.bat

@echo off 
setlocal EnableDelayedExpansion 
SET i=0 
FOR /f %%b IN ('C:\Users\samuele.nava\Desktop\idlock.bat') DO (set var!i!=%%b) 
echo var0: !var0! 
pause 

ScriptSon.bat

sqlplus user/[email protected]:port/sid @C:\...\Query.sql 

query.sql

select id_richiesta,id_ric_tipo,id_lock,ts_ins,ts_ultimo_aggiornamento,codice_op_don,codice_op_rec,id_richiesta_stati,data_cut_over_richiesta,data_cut_over_effettiva from richieste where id_lock is not null and ts_ultimo_aggiornamento=(sysdate) order by ts_ultimo_aggiornamento desc; 

überhaupt Sorry, wenn dieses Problem ist, üblich, aber ich don Ich weiß nicht, wie ich diese Frage lösen soll.

Regard und rock'n'roll

+0

Ihr for-Befehl verwendet die Variable '%% m', aber Sie versuchen, die Variable' %% b' zuzuordnen. Außerdem versuchen Sie, die verzögerte Erweiterung mit der Variablen "var! I!" Zu verwenden, aber Sie haben die verzögerte Erweiterung mit dem Befehl "SETLOCAL" nicht aktiviert. – Squashman

+0

StackOverFlow funktioniert etwas anders als ein normales Q & A-Forum. Schreiben Sie keine Code-Änderungen in einen Kommentar. Bearbeiten Sie Ihre Frage mit Ihrem aktualisierten Code und löschen Sie Ihren Kommentar. – Squashman

+0

@Squashman Ty ... ich bin update auf Code in meiner Frage. Vielen Dank – Samuele

Antwort

0

Ich denke, der Bürgermeister Herausforderung darin, die sqlplus Ausgabe zu formatieren ist. Werfen Sie einen Blick auf dieses Dokument Formatting SQL*Plus Reports

Sobald Sie dies tat ich vorschlagen würde in eine Datei spulen und senden Sie es zum Beispiel SendSMTP verwenden, die Sie von http://www.virtualobjectives.com.au/utilitiesprogs/sendsmtp.htm

sqlplus -s user/[email protected]:port/sid @Query.sql > %TEMP%\Query_output.txt 

SendSMTP.exe /HOST mailhost /FROM "[email protected]" /TO "[email protected]" /SUBJECT "Notification from Database" /BODYFILE %TEMP%\Query_output.txt 

Hinweis Download kann der -s Schalter, unterdrückt das sqlplus-Banner.

+0

Es läuft, aber ich bin nicht sehr zufrieden. Ich möchte die Zeileneingabe steuern, wenn in der Datensatzausgabe "keine Zeile ausgewählt" ist, darf mein Skript keine E-Mail senden. Mit deiner Lösung wie kann ich dieses Ding kontrollieren? ty viel – Samuele

+0

Mein Vorschlag ist gnuwin32 von http://gnuwin32.sourceforge.net/ herunterladen. Dann könnten Sie 'grep 'no row selected'' verwenden, um herauszufinden, ob Sie ein Ergebnis erhalten haben. Oder ändern Sie Ihr gesamtes Skript in ** VB Script ** (oder PowerShell heutzutage), da haben Sie viel mehr Funktionen. –

Verwandte Themen