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

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

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

其中user.txt (我需要过期date的所有用户详细信息的列表,这个列表可能有大约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命令在这种情况下工作,但不知道如何在这里使用它。

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

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

试一试,在脚本中使用fetch.sql时,需要将termout设置为off。 错误仍然存​​在,只是你的脚本会在它之后继续执行。

 set pagesize 20 set linesize 200 whenever sqlerror continue set termout off select username, expiry_date from user_users; exit;