oracle - 如何将 Oracle 脚本的返回码传递回调用它的 WINDOWS Batch 脚本?
问题描述
我正在运行 Windows 10-64 位和 Oracle 18.4 我有一个调用 Windows SQL 脚本文件的 Windows 批处理文件 (test1.bat)。
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 传递回调用它的批处理脚本?这是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 的返回码有限,而且数字越大;因此 ORA-0918 将报告为 126,因此无法解释。更重要的是,一些值会归零,看起来好像没有发生错误。幸运的是,您没有 %errorlevel% 的问题。
推荐阅读
- php - 将类属性添加到提供的 Bundle :如何?
- php - 在php中添加记录时未将正确的数据插入数据库
- java - 如何在其他 Xml 文件中包含 Xml 文件
- r - 具有多个种子的时间序列聚类自动化
- python - 从字符串列表中返回带有整数和字符串的列表
- java - 在 TomEE 7.1.0 服务器上部署 Java 11 SpringBoot 应用程序错误
- javascript - 为什么我不能将两个数组与“包含”进行比较?
- sql - 使用 SSIS 在表上创建约束和索引
- cmake - 未找到现代 CMake 传递依赖
- javascript - .Net Core API 和 PHP/JS 客户端应用程序(Syncfusion 字处理器)的 Cors 请求失败