2013-08-07 34 views
13

Sql * plus kullanarak bir sql komut dosyasını çalıştırdığımda ve $ için kontrol ettiğimde, betik başarılı olmadığında bile 0 aldım.Sql * plus her zaman çıkış kodunu 0 döndürür mü?

Örnek

#$ sqlplus user/[email protected] @script.sql 


SQL*Plus: Release 10.2.0.1.0 - Production on Wed Aug 7 14:20:44 2013 

Copyright (c) 1982, 2005, Oracle. All rights reserved. 


Connected to: 
Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production 
With the Partitioning, OLAP and Oracle Data Mining options 
JServer Release 9.2.0.8.0 - Production 

    v$dataf-ile d, 
      * 
ERROR at line 6: 
ORA-00933: SQL command not properly ended 


Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production 
With the Partitioning, OLAP and Oracle Data Mining options 
JServer Release 9.2.0.8.0 - Production 
$ echo $? 
0 
$ 

bir hata oluştuğunda, sıfır olmayan bir değer iade için istiyoruz.

Bunu nasıl başarabilirim?

cevap

20

Komut dosyanızda bunu yapmak için sqlplus öğesini açıkça belirtmeniz gerekir. Temelde, iki ifade kendinizin kullanabileceği vardır: Örneğin

  • WHENEVER SQLERROR EXIT SQL.SQLCODE
  • WHENEVER OSERROR EXIT

:

WHENEVER SQLERROR EXIT SQL.SQLCODE 
begin 
    SELECT COLUMN_DOES_NOT_EXIST FROM DUAL; 
END; 
/

Ve OS hataları:

WHENEVER OSERROR EXIT FAILURE 
START no_such_file 

Daha fazla bilgi için, bkz. this ve that.

Yardım edin. İyi şanslar!

+1

DÜZENLEME - WHENEVER OSERROR EXIT ile varsayılan çıkış kodu 0 (SUCCESS), yani başka bir seçenek açıkça belirtilmelidir. FAILURE seçeneğini ekledim. – dbenham

5

Vlad'ın kullanacağım cevaptır. Bununla birlikte, onu büyütmek için gerçekten geri dönüş durumuna ihtiyacım varsa açık bir EXIT deyimini kullanmaya çalışıyorum. Örneğin

column status_for_exit new_value exitcode noprint 
select status_computation (parm, parm) as status_for_exit from dual; 

exit &exitcode; 
0

için en iyi aksiyon

Help with SQLPLUS please? How to make SQLPLUS startup with DEFINE `OFF` initially?

bu sayfadaki diğer fikir ve düşüncelerin bir arada bir login.sql dosyası olun veya

olması küresel birini düzenlemek olabilir İçerisinde

. Sonra, dosya yoksa, hata verir. Bir satır başarısız olursa, hata verir. Bununla birlikte, doktorların dediği gibi: https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve052.htm#SQPUG135 , bazı komutların beklediğiniz gibi hata yapamayacağını unutmayın.

İlgili konular