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

Suppress SQL*PLUS error in batch script

我有一个脚本 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 命令可以在这种情况下使用,但不知道如何在这里使用它。

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

set pagesize 20
set linesize 200

whenever sqlerror continue 
set termout off 

select username, expiry_date from user_users;
exit;

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

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