用goto重新运行sql文件

时间:2017-08-17 09:09:11

标签: oracle batch-file sqlplus goto

我想每秒重新运行sqlfile,所以我的想法是使用bat文件连接到db。 SQLPLUS连接到Oracle,运行查询,允许连接存在,运行查询...

但是SQLPLUS连接到Oracle并且不执行查询它只打开文件。

我该如何解决?

file.bat

@echo off
cls
echo exit | sqlplus username/passwor@host
: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

由于

2 个答案:

答案 0 :(得分:0)

从密码中删除@并将hr密码更改为没有任何特殊字符

@指的是sqlplus语法中的sql文件,因此可能会引起混淆......

答案 1 :(得分:0)

只有 的东西,SQL * Plus会看到你正在回复的exit,并将其输入它,这就是它所做的一切 - 退出。

您需要将该文件作为SQL * Plus命令行的一部分来调用:

@echo off
cls
:start
sqlplus username/passwor@host C:\X\sysdate.sql
timeout /T 1
goto start

但您还需要在exit文件中添加sysdate.sql,否则它会在SQL>提示符处等待输入。

您可能还想添加set feedback off;并且您可能还希望将-s-l标志添加到SQL * Plus调用中,以禁止终端屏幕中的横幅,并且如果由于某种原因无法连接到数据库则退出:

sqlplus -s -l username/passwor@host C:\X\sysdate.sql