यह 2012 है 2017. लिपियों पिछली सहस्राब्दी से एक भद्दा और भंगुर हैंगओवर हैं। ओरेकल में कार्यक्षमता की एक शानदार श्रृंखला है जिसे हम पीएल/एसक्यूएल में निष्पादित कर सकते हैं, साथ ही जावा संग्रहीत प्रक्रियाएं हैं, और नौकरी शुरू करने के लिए शेड्यूलिंग है। स्कीमा बनाने या संशोधित करने के लिए डीडीएल चलाने के अलावा ओरेकल डेटाबेस वातावरण में स्क्रिप्ट की शायद ही कोई आवश्यकता है; यहां तक कि डीडीएल स्क्रिप्ट को बाहरी क्लाइंट से ट्रिगर किया जाना चाहिए, शायद टीमसिटी जैसे बिल्ड टूल।
विशेष रूप से मैं एक वास्तुशिल्प विफलता के रूप में एक पीएल/एसक्यूएल प्रोग्राम से एक एसक्यूएल स्क्रिप्ट चलाने का प्रयास करने पर विचार करता हूं। आप उस स्क्रिप्ट के साथ क्या कर रहे हैं जो आप संग्रहीत कार्यविधि के साथ नहीं कर सकते?
संग्रहीत प्रक्रिया में इनपुट पास करने के लिए, यही पैरामीटर हैं। पीएल/एसक्यूएल इंटरैक्टिव नहीं है, हमें मूल्यों को दर्ज करने के लिए क्लाइंट की आवश्यकता है। परिदृश्य के आधार पर यह एसिंक्रोनस रूप से किया जा सकता है (फ़ाइल या तालिका में मान) या सिंक्रोनस रूप से (एसक्यूएल * प्लस, एसक्यूएल डेवलपर या एक बीस्पोक फ्रंट एंड से संग्रहीत प्रक्रिया को कॉल करना)।
यह सब कहने के बाद, वास्तविक दुनिया में हम डेटाबेस और बाहरी ओएस के बीच अंतर-निर्भरता के साथ गन्दा आर्किटेक्चर के साथ काम करते हैं। तो हम क्या कर सकते हैं?
- शेल कमांड को निष्पादित करने के लिए हम जावा स्टोर्ड प्रोसीजर लिख सकते हैं। यह आदरणीय समाधान है, जो Oracle 8i के आसपास रहा है। और जानें।
- 10g Oracle में DBMS_JOB को DBMS_SCHEDULER से बदलें। एक बार इस टूल के एन्हांसमेंट में बाहरी नौकरियों यानी शेल स्क्रिप्ट को चलाने की क्षमता है। और जानें।
- चूंकि Oracle 11g R1 बाहरी टेबल प्री-प्रोसेसर स्क्रिप्ट का समर्थन करते हैं, जो टेबल को क्वेरी करने से पहले शेल कमांड चलाते हैं। और जानें।
ध्यान दें कि ये सभी विकल्प उन्नत पहुंच की मांग करते हैं (निर्देशिका वस्तुओं पर अनुदान, सुरक्षा प्रमाण-पत्र, आदि)। ये केवल विशेषाधिकार प्राप्त उपयोगकर्ताओं (यानी डीबीए) द्वारा प्रदान किए जा सकते हैं। जब तक हमारे डेटाबेस में आश्चर्यजनक रूप से ढीली सुरक्षा कॉन्फ़िगरेशन नहीं है, तब तक हमारे लिए पीएल/एसक्यूएल से मनमानी शेल स्क्रिप्ट चलाने का कोई तरीका नहीं है।
अंत में, यह स्पष्ट नहीं है कि आप PL/SQL में SQL स्क्रिप्ट चलाने से क्या लाभ की अपेक्षा करते हैं। याद रखें कि PL/SQL डेटाबेस सर्वर पर चलता है, इसलिए यह क्लाइंट मशीन पर स्क्रिप्ट नहीं देख सकता . यह उपयोगकर्ता इनपुट को स्वीकार करने की आवश्यकता के आलोक में प्रासंगिक लगता है।
शायद सबसे सरल उपाय मूल लिपि का पुन:विन्यास है। आवश्यक PL/SQL कॉल को एक ब्लॉक में विभाजित करें और फिर केवल नामित स्क्रिप्ट को कॉल करें:
begin
proc(para1,para2);
end;
/
@prompt1.sql