Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 发生错误时如何退出sqlplus_Oracle_Error Handling_Sqlplus - Fatal编程技术网

Oracle 发生错误时如何退出sqlplus

Oracle 发生错误时如何退出sqlplus,oracle,error-handling,sqlplus,Oracle,Error Handling,Sqlplus,我希望捕获可能发生的任何sql错误,因此我在ksh中写了以下内容: $ORACLE_HOME/bin/sqlplus -s u/p <<EOF WHENEVER OSERROR EXIT 68; WHENEVER SQLERROR EXIT SQL.SQLCODE; CREATE TABLE new_table AS (SELECT * FROM wrong_old_table); COMMIT; EOF 我更改了代码: $ORACLE_

我希望捕获可能发生的任何sql错误,因此我在ksh中写了以下内容:

$ORACLE_HOME/bin/sqlplus -s u/p <<EOF
    WHENEVER OSERROR EXIT 68;
    WHENEVER SQLERROR EXIT SQL.SQLCODE;

    CREATE TABLE new_table
    AS (SELECT * FROM wrong_old_table);
    COMMIT;
EOF
我更改了代码:

 $ORACLE_HOME/bin/sqlplus -s u/p <<EOF
    WHENEVER OSERROR EXIT 68;
    WHENEVER SQLERROR EXIT SQL.SQLCODE;

    BEGIN
       CREATE TABLE new_table
       AS (SELECT * FROM wrong_old_table);
       COMMIT;
    END;
 EOF

 sql_code=$?

 echo "code=$sql_code"

$ORACLE\u HOME/bin/sqlplus-su/p我不确定您在做什么,但这种类型的代码对我来说很好。第一个例子是:

SQL> whenever sqlerror exit sql.sqlcode;
SQL> create table new_table as select * from wrong_old_table;
create table new_table as select * from wrong_old_table
                                        *
ERROR at line 1:
ORA-00942: table or view does not exist

$ echo $?
174
请注意,退出代码与SQLCODE并不完全对应,因为SQLCODE始终为负值,而大多数Shell中的退出代码限制为+0到+255之间的值;因此,您得到的退出代码似乎是SQLCODE(+)的两个补码的低位字节。实际上,这意味着您将获得一个非零值,该值是可预测和可重复的,但它不会与SQLCODE完全匹配,并且多个SQLCODE值可能会产生相同的退出代码值

祝你好运


(+)如果您介意的话:在上面的示例中,SQLCODE是-942。十六进制表示为0xFFFFFC52。将该数字的所有位反转,得到一的补码,即0x3AD。将一与该值相加将得到二者的补码值,即0x3AE。其低位字节为0xAE,以10为底为174。我对SQLCODE值-904重复了这一点,它给出了136的退出代码,-6550,它给出了150的退出代码。

我不确定您在做什么,但这种类型的代码对我来说很好。第一个例子是:

SQL> whenever sqlerror exit sql.sqlcode;
SQL> create table new_table as select * from wrong_old_table;
create table new_table as select * from wrong_old_table
                                        *
ERROR at line 1:
ORA-00942: table or view does not exist

$ echo $?
174
请注意,退出代码与SQLCODE并不完全对应,因为SQLCODE始终为负值,而大多数Shell中的退出代码限制为+0到+255之间的值;因此,您得到的退出代码似乎是SQLCODE(+)的两个补码的低位字节。实际上,这意味着您将获得一个非零值,该值是可预测和可重复的,但它不会与SQLCODE完全匹配,并且多个SQLCODE值可能会产生相同的退出代码值

祝你好运


(+)如果您介意的话:在上面的示例中,SQLCODE是-942。十六进制表示为0xFFFFFC52。将该数字的所有位反转,得到一的补码,即0x3AD。将一与该值相加将得到二者的补码值,即0x3AE。其低位字节为0xAE,以10为底为174。我对-904的SQLCODE值和-6550的SQLCODE值进行了重复,前者给出了136的退出代码,后者给出了150的退出代码。

Hi!您的脚本中有PL/SQL块,但它没有执行,因为您错过了“END;”之后下一行的最后一个“/”。这就是为什么你的错误等级是0。嗨!您的脚本中有PL/SQL块,但它没有执行,因为您错过了“END;”之后下一行的最后一个“/”。这就是为什么您的错误级别为0。