SQL कथनों में प्रक्रियाओं की अनुमति नहीं है क्योंकि घोषणात्मक और अनिवार्य प्रोग्रामिंग शैलियों को मिलाना भ्रामक है।
SQL कथन शर्तों की एक सूची है - यह Oracle पर निर्भर है कि वह उन स्थितियों से मेल खाने वाले परिणाम सेट का उत्पादन कैसे करें। पीएल/एसक्यूएल संग्रहीत कार्यविधि निर्देशों का एक सेट है जो चीजों को बहुत अनुमानित तरीके से बदलता है।
नीचे दिए गए उदाहरण में, कितनी बार pr
चाहिए सज़ा पाएं? क्या इसे id = 1
. से पहले या बाद में निष्पादित किया जाता है? ? यदि SQL कथनों में एक पूर्व-निर्धारित क्रम होता है, तो अनुकूलक विधेय को आगे बढ़ाने, उपश्रेणियों को मर्ज करने आदि में सक्षम नहीं होगा, और प्रदर्शन अस्वीकार्य होगा।
select *
from table1
where id = 1
and pr;
भले ही select
. में एक प्रक्रिया का उपयोग किया गया हो सूची, इसका कोई मतलब नहीं हो सकता है। उदाहरण के लिए, select
exists
. के अंदर सूची हमेशा अनदेखा किया जाता है।
select * from dual where exists (select pr from dual);
लेकिन वास्तव में SQL कथनों को कभी-कभी बाहरी दुनिया के साथ बातचीत करने की आवश्यकता होती है, और कुछ प्रक्रियात्मक तर्क की आवश्यकता होती है। कार्यों की अनुमति है क्योंकि वे आमतौर पर बस कुछ गणना करें और एक मूल्य वापस करें। कार्य आम तौर पर कार्यक्रम की स्थिति पर निर्भर नहीं होते हैं और इसके बहुत सारे दुष्प्रभाव होते हैं। आपके कार्य कर सकते हैं सत्र चर का उपयोग करें, तालिकाओं को अपडेट करें (यदि यह PRAGMA AUTONOMOUS TRANSACTION
पर सेट है) ), एक संदर्भ सेट करें, आदि। Oracle आपको उन चीजों को करने से नहीं रोक सकता है, लेकिन SQL कथनों में प्रक्रियाओं को अस्वीकार करने से कम से कम ऐसे कोड को हतोत्साहित किया जाएगा।