如何将返回代码从 Oracle 脚本传递回调用它的 WINDOWS 批处理脚本?



我正在运行Windows 10-64位和Oracle 18.4,我有一个Windows批处理文件(test1.bat(,它调用Windows SQL脚本文件。

SQLPLUS -s (username)/(password) as sysdba @test1.sql
Echo %errorlevel%

然后,当我从 SQLPLUS 返回到 Test1.bat 时,我想对 %errorlevel% 变量进行一些错误检查。我将根据返回代码是 ORA-01940(无法删除当前连接的用户(还是 ORA-01918(用户"MYUSER"不存在(等创建不同的进程。

当我运行test1.bat时,我无法引用Oracle SQLPLUS的返回代码,即使用户之前已被丢弃。批处理脚本生成

>Echo 0
0

如何将错误代码从 Oracle SQLPLUS 传递回调用它的批处理脚本?这是测试1.sql

PROMPT Begin Dropping User Schema MyUser
Alter Session Set CONTAINER=(MyContainer);
Alter Session Set "_oracle_script"=true;
DROP user MYUSER cascade;
Whenever sqlerror exit sql.sqlcode;
EXIT;

您需要在错误发生之前声明错误条件处理:

Whenever sqlerror exit sql.sqlcode; 
DROP user MYUSER cascade;
EXIT 0;

您可以在脚本中的不同点更改处理。例如,您可以在创建之前执行保护性丢弃,方法是忽略丢弃上的错误,但如果下一步失败,仍会停止:

whenever sqlerror continue
drop ...
whenever sqlerror exit failure
create...
alter...
etc

顺便说一下,在Unix-land中,这种方法是有限的,因为大多数(所有?(shell的返回码有限,并且更高的数字环绕;所以ORA-0918将被报告为126,因此无法解释。更重要的是,某些值将换行为零,使其看起来像没有发生错误。幸运的是,您没有 %errorlevel% 的问题。

最新更新