oracle एसक्यूएल*प्लस हमेशा से बाहर निकलें कोड 0 देता है?




scripting sqlplus (3)

जब भी मैं एसक्यूएल * प्लस का उपयोग करके एक एसक्यूएल स्क्रिप्ट चलाता हूं और $ के लिए चेक करता हूं? मुझे तब भी 0 मिलता है जब स्क्रिप्ट सफल नहीं होती।

उदाहरण

#$ sqlplus user/password@instance @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
$

जब कोई त्रुटि होती है तो मैं इसे गैर-शून्य मान वापस करना चाहूंगा।

मैं उसे कैसे प्राप्त कर सकता हूं ?


सबसे अच्छी कार्रवाई इस पृष्ठ पर अन्य विचारों का एक संयोजन हो सकती है

SQLPLUS के साथ मदद कृपया? शुरूआत के साथ 'एसक्यूएलएलएलएस स्टार्टअप' को कैसे तय करें?

एक लॉगिन.sql फ़ाइल बनाओ, या वैश्विक को संपादित करने के लिए एक है

WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT SQL.SQLCODE

इसके अंदर। फिर, यदि फाइल मौजूद नहीं है, तो यह त्रुटि होगी। यदि एक पंक्ति विफल हो जाती है, तो यह त्रुटि होगी।

हालांकि, ध्यान रखें कि डॉक्स का कहना है: https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve052.htm#SQPUG135 कि कुछ आदेश अभी भी त्रुटि की संभावना नहीं है जैसा कि आप अपेक्षा कर सकते हैं


आपको अपनी स्क्रिप्ट में, यह करने के लिए स्पष्ट रूप से sqlplus बता देना होगा असल में, दो बयान हैं जिनका उपयोग आप कर सकते हैं:

  • WHENEVER SQLERROR EXIT SQL.SQLCODE
  • WHENEVER OSERROR EXIT

उदाहरण के लिए:

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

और ओएस त्रुटियों के लिए:

WHENEVER OSERROR EXIT FAILURE
START no_such_file

अधिक जानकारी के लिए, यह और वह देखें

आशा करता हूँ की ये काम करेगा। शुभ लाभ!


व्लाद का जवाब मैं उपयोग करना चाहता हूँ हालांकि, अगर मैं वास्तव में उस रिटर्न की स्थिति की ज़रूरत हो तो मैं स्पष्ट EXIT स्टेटमेंट का उपयोग करने की कोशिश करता हूं। उदाहरण के लिए

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

exit &exitcode;