यदि आप इस नियंत्रण अनुभाग को अपनी स्क्रिप्ट में रख सकते हैं, उदा। elcm_ctl.sql
, आप इसे बना सकते हैं:
accept run_it char format a1 prompt "Run the script?"
set termout off
whenever sqlerror exit success rollback
exec if upper(nvl('&run_it', 'N')) != 'Y' then raise no_data_needed; end if;
whenever sqlerror continue
spool c:\elcm.sql
select 'select sysdate from dual;' from dual;
spool off
set termout on
spool c:\elcm_details.spl
@c:\elcm.sql
spool off
स्वीकार करें
आदेश
मेरी राय में, प्रतिस्थापन संकेतों पर भरोसा करने से थोड़ा अधिक साफ है, और कुछ हद तक स्वयं-दस्तावेज है। यह उपयोगकर्ता को केवल 'gen'
. के बजाय निर्दिष्ट स्ट्रिंग के साथ संकेत देता है . (एसक्यूएल * प्लस में आप इसे बढ़ा सकते हैं और उपयोगकर्ता को एक ही वर्ण में डालने के लिए मजबूर कर सकते हैं, अगर वे कुछ भी लंबे समय तक डालते हैं तो फिर से संकेत देते हैं; और 'एन' के लिए डिफ़ॉल्ट अगर वे कुछ भी दर्ज किए बिना रिटर्न दबाते हैं। लेकिन एसक्यूएल डेवलपर केवल समर्थन करता है कार्यक्षमता का एक सबसेट)।
फिर एक छोटा अनाम ब्लॉक एक अपवाद फेंकता है - वास्तव में कोई फर्क नहीं पड़ता - यदि दर्ज किया गया चर मान 'y'
नहीं है या 'वाई'
. ऐसा करते समय मैंने सेट किया है टर्मआउट बंद
तो आप वास्तविक अपवाद नहीं देखते हैं। और मैंने जब भी sqlerror
जब वह अपवाद उठाया जाता है तो स्क्रिप्ट को बाहर निकलने के लिए, इसलिए बाद में जो कुछ भी आता है वह नहीं चलता है। नियंत्रण स्क्रिप्ट में वह सब कुछ है, न केवल अगली क्वेरी, बल्कि यदि आपको अधिक लचीला होने की आवश्यकता है तो आपके पास कई उप-स्क्रिप्ट हो सकती हैं।
लेकिन SQL डेवलपर में, टर्मआउट
जब आप @
. के माध्यम से चलते हैं तो केवल अपेक्षित रूप से काम करता है . यदि आप elcm_ctl.sql
. की सामग्री चलाते हैं सीधे SQL वर्कशीट से आप देखेंगे कि अपवाद उठाया जा रहा है, जो थोड़ा बदसूरत है। तो इसके बजाय उस नियंत्रण स्क्रिप्ट को सहेजें और एक खाली कार्यपत्रक में बस करें:
@c:\elcm_ctl.sql
उस कार्यपत्रक को एक स्क्रिप्ट के रूप में निष्पादित करें और यह आपको संकेत देगा; अगर आप 'Y'
. दर्ज करते हैं आप स्क्रिप्ट आउटपुट विंडो में स्क्रिप्ट का आउटपुट देखेंगे (जब तक कि आप सेट टर्मआउट बंद
नहीं छोड़ते हैं) नियंत्रण स्क्रिप्ट में), और यह स्पूल फ़ाइल बनाएगा। अगर आप कुछ और डालते हैं तो यह elcm.sql
नहीं चलेगा फ़ाइल, स्क्रिप्ट आउटपुट विंडो में कुछ भी नहीं दिखाएगी, और स्पूल फ़ाइल नहीं बनाएगी।