2017-08-17 64 views
0

我想每秒重新運行一次sqlfile,所以我的想法是用bat文件連接到db。 SQLPLUS連接到Oracle,運行查詢,允許連接存在,運行查詢...重新運行sql文件goto

但SQLPLUS連接到Oracle,並不執行查詢,它只能打開文件。

我該如何解決

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 

感謝

+0

後文件操作,Oracle斷開 –

+0

你收到的輸出是什麼。 –

+0

日,月,年,並在24小時的時間 –

回答

0

從您的密碼刪除@和更改小時密碼沒有任何特殊字符

@指的是在你的sqlplus語法的sql文件,因此這可能是令人困惑的問題......

+0

抱歉,我在我的連接錯誤, sqlplus的用戶名/密碼@主機,這是現在 我的密碼沒有特殊字符 –

+0

@sandman - 的'@ host' ,或原始的'hr/hr @ pwd'版本中的'@ pwd',是連接字符串而不是SQL文件 - 在'@'之前需要一個空格來表示要運行的文件。 –

+0

是的,一旦@語法錯誤被OP清除了,我打算在最後提到退出等。 – sandman

0

唯一事情的SQL * Plus是看到它的exit你呼應和管道進去,所以這是所有它 - 退出。

您需要將文件調用的SQL * Plus命令行的一部分:

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

但你還需要一個exit添加到您的sysdate.sql文件,也將在SQL>掛起等待輸入提示。

您可能還想添加set feedback off;你可能希望將-s-l標誌添加到SQL * Plus的調用也從終端屏幕抑制偉大旗幟,以退出,如果它不能連接到數據庫由於某些原因:

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

謝謝,現在我有一個工作「循環」,但現在它連接到數據庫,做查詢,斷開連接並重復。 並且它總是需要5秒才能連接下一個。 但我只需要一個連接到db:connection,重新運行查詢,直到我退出它。 而當db連接丟失時,bat.file必須繼續運行。 –

+0

如果你想繼續,如果連接丟失 - 大概SQL \ * Plus將不得不退出然後 - 你需要像這樣的批處理循環來重新啓動它。但是,最重要的是,您想要在SQL \ * Plus會話中永久循環,每秒重複一次相同的查詢? –

+0

我的帳單在一夜之間運行,並且此結算與數據庫中的數據相關。不幸的是,有時候計費會在一夜之間中斷。所以我想檢查一下數據庫連接,如果這整個晚上都可以不間斷的話。 –