2017-08-17 66 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

我的帐单在一夜之间运行,并且此结算与数据库中的数据相关。不幸的是,有时候计费会在一夜之间中断。所以我想检查一下数据库连接,如果这整个晚上都可以不间断的话。 –