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