抑制批处理脚本中的 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
我有一个脚本 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