0

如何在 SQLPlus 中进行错误处理,在遇到错误时打印出自定义消息。我把我的代码放在下面。

我的代码

#!/bin/bash

    echo "My Scripts run below"
    sqlplus -S UID1/UID2@DB1<< EOF
    whenever sqlerror exit sql.sqlcode;
    @/path/Script1
    @/path/Script2
    exit;
    EOF
   echo "My Scripts have run"

输出

My Scripts run below
SP2-0310: unable to open file "/path/Script1.sql"
SP2-0310: unable to open file "/path/Script2.sql"
My Scripts have run

所需输出

My Scripts run below
**Below error in Script1**
SP2-0310: unable to open file "/path/Script1.sql"
**Below error in Script2**
SP2-0310: unable to open file "/path/Script2.sql"
My Scripts have run
4

2 回答 2

1

事实上,根据我的经验,SQLPlus 返回码总是 0,所以我建议你做我在以前的项目中必须做的事情:将脚本输出重定向到一个文件中,然后解析它以找到 SPx-xxxx 或 ORA-xxxx 表达式错误。

于 2013-06-28T07:29:07.480 回答
1

WHENEVER SQLERROR检测 SQL 命令或 PL/SQL 块中的错误。您应该使用它WHENEVER OSERROR来捕获操作系统错误。

WHENEVER OSERROR EXIT FAILURE

如果不确定返回的是哪个错误代码,您可以考虑硬编码一个数字:

WHENEVER OSERROR EXIT 1

为了清楚起见,我将最后一个更改EXIT

EXIT SUCCESS

您将无法同时捕获 script1 和 script2 的错误。在第一个错误之后,您的 SQL*Plus 脚本退出并将控制权交还给 bash。

关于如何处理 bash 中的退出代码,请参阅Bash 中的错误处理

于 2013-06-28T08:48:57.130 回答