如何将 Oracle 脚本中的 return 代码传回调用它的 WINDOWS 批处理脚本?

How do I pass a return code from an Oracle script back to the WINDOWS Batch script which called it?

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

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

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

当我 运行 test1.bat 时,我无法从 Oracle SQLPLUS 引用 return 代码,即使用户之前已被删除。批处理脚本生成

>Echo 0
0

如何将错误代码从 Oracle SQLPLUS 传递回调用它的批处理脚本?这是 test1.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 领域,这种方法是有限的,因为大多数(所有?)shell 的代码都是有限的 return,并且更高的数字环绕;所以 ORA-0918 将被报告为 126,因此无法解释。更重要的是,一些值将回绕到零,使其看起来没有错误发生。幸运的是,%errorlevel% 没有这个问题。