2017-08-17 2 views
0

Ich möchte die sqlfile jede Sekunde wiederholen, so war meine Idee, eine Verbindung zu der db mit der Bat-Datei. SQLPLUS verbinden mit Oracle, führen Sie die Abfrage, ermöglicht die Verbindung bestehen, führen Sie die Abfrage ...Erneut eine SQL-Datei mit goto

Aber SQLPLUS mit Oracle verbunden und führen Sie nicht die Abfrage, es öffnet nur die Datei.

Wie kann ich es beheben

file.bat

@echo off 
cls 
echo exit | sqlplus username/[email protected] 
:start 
@C:\X\sysdate.sql 
timeout /T 1 
goto start 

file.sql

spool C:\X\test.txt append 
set serveroutput on 
declare 
    dat ...; 
begin 
    select to_char(sysdate,'dd.mm.yyyy hh24:mi:ss') 
    into dat 
    from dual;  
    dbms_output.put_line('Some german words like Bratwurst und Sauerkraut'||dat); 
end; 
/
spool off 

Dank

+0

Nach die Datei geöffnet, Oracle getrennt –

+0

Was ist die Ausgabe, die Sie erhalten. –

+0

Tag, Monat, Jahr und die Zeit, in 24h –

Antwort

0

das @ aus Ihrem Passwort entfernen und das hr Passwort ändern keine Sonderzeichen haben

@ bezieht sich auf die SQL-Datei in Ihrer sqlplus Syntax, so dass verwirrende Fragen ...

+0

sorry ich in meiner Verbindung einen Fehler hatte, sqlplus Benutzername/Passwort @ host dieses Recht jetzt ist mein Passwort keine Sonderzeichen –

+0

@sandman hatte - die '@ host' , oder das '@ pwd' in der ursprünglichen' hr/hr @ pwd'-Version, ist die Verbindungszeichenfolge nicht die SQL-Datei - Sie benötigen ein Leerzeichen vor dem '@', um eine Datei anzugeben, die ausgeführt werden soll. –

+0

Ja, sobald der @ Syntaxfehler vom OP gelöscht wurde, wollte ich den Ausgang am Ende erwähnen, usw. – sandman

0
sein könnte

Die nur Sache SQL * Plus ist es zu sehen, die exit Sie Echo und Leitungen hinein, das ist so alles was es tut - beenden.

Sie müssen die Datei als Teil des SQL * Plus-Befehlszeile aufzurufen:

@echo off 
cls 
:start 
sqlplus username/[email protected] C:\X\sysdate.sql 
timeout /T 1 
goto start 

Aber Sie müssen auch ein exit auf Ihre sysdate.sql Datei hinzuzufügen, oder es wird für die Eingabe am SQL> hängen warten prompt.

Sie könnten auch hinzufügen, set feedback off; und man könnte die -s und -l Flaggen auf die SQL * hinzufügen möchten dazu rufen, um das Banner vom Terminalbildschirm unterdrücken und zu beenden, wenn es nicht auf die DB aus irgendeinem Grund eine Verbindung herstellen können:

sqlplus -s -l username/[email protected] C:\X\sysdate.sql 
+0

Danke, jetzt habe ich eine funktionierende "Schleife", aber jetzt ist es mit der db verbunden, mache die Abfrage , getrennt und wiederhole es. Und es dauert immer 5 Sekunden bis zum nächsten verbunden. Aber ich brauche nur eine Verbindung mit der db: Verbindung, führen Sie die Abfrage erneut, bis ich es verlassen. Und wenn die Db-Verbindung verloren ist, muss die bat.file weiter ausgeführt werden. –

+0

Wenn Sie fortfahren möchten, wenn die Verbindung verloren geht - vermutlich würde SQL \ * Plus dann beendet werden - benötigen Sie die Batch-Schleife, um sie neu zu starten. Aber obendrein wollen Sie für immer in der SQL \ * Plus-Sitzung eine Schleife durchlaufen, indem Sie dieselbe Abfrage jede Sekunde wiederholen? –

+0

Ich habe eine Abrechnung über Nacht laufen und diese Abrechnung bezieht ihre Daten aus einer Datenbank. Manchmal bricht die Abrechnung leider über Nacht ab.Also ich würde gerne die DB-Verbindung überprüfen, wenn diese die ganze Nacht ohne Pausen zur Verfügung steht. –