在批处理脚本中抑制SQL * PLUS错误

时间:2015-01-14 14:36:35

标签: sql windows oracle batch-file

我有一个脚本 db.bat ,如下所示:

@echo off

setlocal enabledelayedexpansion
 for /F "tokens=*" %%A in (user.txt) do (
    sqlplus -s %%A @fetch.sql  >> output.txt 

 )

其中 user.txt (我需要有效期限的所有用户详细信息列表。此列表可能有大约40-50行)是:

dbuser/password@database1
readuser/p@ssw0rd@database1
adminuser/Pa$$word@database2
.......
.......
.......

fetch.sql 是:

set pagesize 20
set linesize 200

select username, expiry_date from user_users;
exit;

我在这里遇到的问题是,当我的脚本db.bat遇到下面给出的任何SQL错误时,它不会进一步移动并在此时被挂起,直到我手动停止它。

SQL错误

ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified


ERROR:
ORA-28000: the account is locked 

我已经检查过WHENEVER SQLERROR命令在这种情况下有效,但我不知道如何在这里使用它。

2 个答案:

答案 0 :(得分:2)

对于那些类型的错误,SQL * Plus是“挂起”的。在用户名提示下,因为它无法连接。由于-s标志,你不会看到它。默认情况下,它将允许三次尝试,这在交互式运行时很有用,但从这样的脚本运行时却没有用处。您可以在使用the -l 'logon' option登录失败后退出:

sqlplus -s -l %%A @fetch.sql  >> output.txt

答案 1 :(得分:0)

试试这个,在脚本中使用fetch.sql时,需要将termout设置为off。 错误仍然存​​在,只是您的脚本将继续执行。

set pagesize 20
set linesize 200

whenever sqlerror continue 
set termout off 

select username, expiry_date from user_users;
exit;