SQL और PL / SQL के बीच अंतर कैसे करें?


16

मुझे पता है कि सवाल बहुत बेवकूफ लग सकता है, लेकिन मैंने इस हिस्से को कभी नहीं समझा।

SQL * प्लस SQL ​​और PL / SQL दोनों के साथ काम करता है। मुझे कैसे पता चलेगा कि कुछ कोड SQL या PL / SQL है? यदि मेरे कोड में लूप है, तो क्या यह SQL नहीं है?

पीएल / एसक्यूएल SQL के लिए छोरों, सशर्तियों आदि के लिए एक एक्सटेंशन है। फिर कोई भी SQL कोड डिफ़ॉल्ट PL / SQL कोड के द्वारा होता है? क्या ऐसा नहीं है?

SQL और PL / SQL के बीच सीमांकन है?

इस प्रश्न को ट्रिगर करने वाले b / w SQL और PL / SQL को विभेदित करने के दो उदाहरण:

इन दोनों के बीच सारणी बनाने में क्या अंतर है?

/programming/2267386/oracle-11g-varray-of-objects/2267813#2267813

जवाबों:


12

यह एक दिलचस्प सवाल है, सुनिश्चित करने के लिए। अधिकांश लोग जो ओरेकल विकास से परिचित हैं, वे इसे एक विचार नहीं देंगे, लेकिन जब आप इसके नीचे आते हैं, तो कभी-कभी यह SQL और PL / SQL के बीच सीमांकन को परिभाषित करने के लिए भ्रमित करता है।

शब्दकोष की परिभाषा को देखकर, आपको यह पता लगाना शुरू हो जाता है कि प्रत्येक कवर के कार्य-क्षेत्र क्या हैं:

एसक्यूएल - संरचित क्वेरी भाषा

PL / SQL - प्रक्रियात्मक भाषा / संरचित क्वेरी भाषा

पर्यवेक्षक पाठक यह देख सकता है कि SQL 8 से दो बार कैसे दिखाता है) ऐसा इसलिए है क्योंकि SQL अक्सर PL / SQL के भीतर एम्बेडेड होता है - PL / SQL एक ऐसी भाषा है जो एक मालिकाना 4th जनरेशन भाषा (4GL) प्रदान करने के लिए बनाई गई थी जो डेटाबेस ऑब्जेक्ट्स के साथ बहुत अच्छा खेलता है आकाशवाणी।

विकिपीडिया में SQL और PL / SQL दोनों पर कुछ बहुत अच्छी सामग्री है

भ्रामक हिस्सा वह जगह है जहां PL / SQL और SQL थोड़ा ओवरलैप करते हैं। SQL के दायरे में डेटा इंसर्ट, क्वेरी, अपडेट और डिलीट, तथाकथित DML या डेटा मैनिप्युलेशन लैंग्वेज ऑपरेशंस शामिल हैं, लेकिन इसमें डीडीएल या डेटा डेफिनिशन लैंग्वेज ऑपरेशंस, क्रिएट, चेंज, रिनेम, ड्रॉप भी शामिल हैं। यहाँ जहाँ कुछ गड़बड़ हो सकती है। एक संग्रहीत कार्यविधि बनाने के लिए ऑपरेशन, जिसे पीएल / एसक्यूएल का उपयोग करके लिखा गया है, वास्तव में एसक्यूएल है - आप पीएल / एसक्यूएल के ब्लॉक का प्रतिनिधित्व करने वाले डेटाबेस ऑब्जेक्ट को बनाने के लिए एसक्यूएल का उपयोग करते हैं।

इसी तरह, आप अपने PL / SQL के अंदर SQL कोड एम्बेड कर सकते हैं। उदाहरण के लिए, PL / SQL में एक लूप SQL क्वेरी पर आधारित हो सकता है। अपने मन को थोड़ा उड़ा लेता है, एह? आप SQL का उपयोग करके एक प्रक्रिया बनाते हैं जो वास्तव में डेटाबेस से रिकॉर्ड पर कुछ कार्रवाई करने के लिए आंतरिक रूप से SQL का उपयोग करता है।

अगर तुम मुझसे पूछोगे तो मस्त माल।


2
दरअसल, लाइन धुंधली है। आप पीएल / एसक्यूएल प्रक्रिया बनाने के लिए एक एसक्यूएल स्टेटमेंट लिख सकते हैं जिसमें एक एसक्यूएल स्टेटमेंट होता है जो पीएल / एसक्यूएल फ़ंक्शन को कॉल करता है जिसमें एसक्यूएल स्टेटमेंट होता है, आदि
लेह रिफ़ेल

1
@ नीचे जाओ खरगोश छेद हम जाओ!
21

मैं यह नहीं कहूंगा कि लाइन बिल्कुल धुंधली थी। PL / SQL SQL के लिए प्रक्रियात्मक आवरण है। अधिकांश PL / SQL में SQL कथन होते हैं, हालाँकि यह करने की आवश्यकता नहीं है। आप वास्तविक SQL कर्सर v$sqlआदि का पता लगा सकते हैं
विलियम रॉबर्टसन

12

अगर इसमें लिपटा है

  • BEGIN ... END
  • DECLARE ... END
  • CREATE OR REPLACE ... END
  • एक-लाइनर उपसर्ग है EXECUTE

फिर यह PL / SQL है। हुड के तहत इसका क्या मतलब है? SQL को एक क्वेरी प्लान के लिए "संकलित" किया जाता है और निष्पादित किया जाता है, जिसके परिणामस्वरूप परिणाम SELECTया अन्य मामलों में प्रभावित पंक्तियों की संख्या, या एक त्रुटि को वापस करता है। पीएल / एसक्यूएल हालांकि अधिक शामिल है। इसमें संदर्भित प्रत्येक वस्तु को अस्तित्व और आवश्यक अनुदान के लिए जांचा जाता है, फिर पीएल / एसक्यूएल को मूल-निवासी कोड के लिए संकलित किया जाता है , जो पूरी गति से निष्पादित होता है। निर्भरताएं ट्रैक की जाती हैं और यदि कोई तालिका बदलती है, तो किसी भी पीएल / एसक्यूएल संदर्भ में इसे पुन: उपयोग की आवश्यकता होती है। इसका कारण गति है; चूँकि सब कुछ संकलन के समय सामने होता है, इसलिए पीएल / एसक्यूएल में किसी भी रनटाइम जाँच की आवश्यकता नहीं होती है, जबकि एसक्यूएल स्टेटमेंट को हर बार जांचना चाहिए (यहां तक ​​कि क्वेरी प्लान भी कैश नहीं हैं, तथाकथित सॉफ्ट पार्सविशेषाधिकारों को अभी भी जांचना चाहिए, और यहां तक ​​कि एक नरम पार्स की लागत भी इसके साथ जुड़ी हुई है)।

यह संग्रहीत प्रक्रियाओं के "हत्यारा लाभ" में से एक है क्योंकि ओरेकल उन्हें करता है; वास्तव में एक पीएल / एसक्यूएल संग्रहीत खरीद या ट्रिगर को निष्पादित करने से परिणाम प्राप्त करने के लिए गणना की पूर्ण न्यूनतम राशि होती है। ओरेकल कर्नेल के बाहर चल रहे एप्लिकेशन कोड, जहां यह अविश्वसनीय है, डेटा में प्राप्त करने के लिए अधिक हुप्स के माध्यम से कूदना पड़ता है। OCaml या Haskell जैसी दृढ़ता से-टाइप की गई, पारदर्शी रूप से पारदर्शी उच्च-स्तरीय भाषाओं के लिए यह एक ही तर्क है - संकलन के समय में एक बार अधिक काम करें, और कोड निष्पादित होने के लाखों समय पर लाभ उठाएं।


2
मिश्रण में जोड़ने के लिए कॉल एक एसक्यूएल स्टेटमेंट है जिसे स्टोर किए गए प्रोग्राम यूनिट को निष्पादित करने के लिए उपयोग किया जाता है, और एक बेगिन के रूप में फिर से अंडर-द-हूड लिखा जाता है ... END
गैरी

2
जैसा कि EXECUTE है, यह सिंथैटिक शुगर है
Gaius

5

SQL और PL / SQL के बीच सीमांकन है?

SQL एक मानक * है।

पीएल / एसक्यूएल मानक * के लिए एक विक्रेता विस्तार है।

* एसक्यूएल एक भाषा एक स्पष्ट व्याकरण और कैसे है कि व्याकरण लागू किया जाना चाहिए के लिए नियम हैं वह यह है कि और है लेकिन नहीं है एक मानक प्रति-seहालाँकि, चूंकि एक भाषा विनिर्देश है, जिस पर हर कोई सहमत हो सकता है, तो SQL में लिखा गया कुछ भी पोर्टेबल होगा यदि प्रोग्राम केवल SQL में लिखा गया था।

लेकिन क्योंकि पीएल / एसक्यूएल एक विक्रेता विस्तार है, इसमें भाषा के हिस्से होंगे जो अन्य विक्रेताओं का समर्थन नहीं कर सकते हैं।


3
मैं कहूँगा कि PL / SQL एक वास्तविक मानक है, जबकि SQL एक de jure मानक है :-)
Gaius

3
P: @Gaius और उस बयान अकेले से मैं दो बातें लगता होगा: आप एक ORA देव हैं, और आप TSQL लगता है सिर्फ गन्दा है
jcolebrand

@jcolebrand मेरा पहला DBA कार्य वास्तव में Sybase पर था, लेकिन आप सही हैं, मैं इन दिनों मुख्य रूप से Oracle के साथ काम करता हूं। मुझे बहुत खुशी होगी यदि आप या तो डेटाबेस पर टी-एसक्यूएल या पीएल / एसक्यूएल लिख सकते हैं, लेकिन भाषाएं अपने प्लेटफार्मों को दर्शाती हैं (जैसे टी-एसक्यूएल यह तरीका है क्योंकि एसक्यूएल सर्वर और इसके वंशजों में कर्सर और ताले महंगे हैं , और पीएल / एसक्यूएल वह तरीका है, क्योंकि ओरेकल में किसी ने अंतिम बार DoD में काम किया है) :-)
गयूस

@ जीयस आह, हाँ, मानकों के बारे में पुराना तर्क इतना अच्छा है क्योंकि चुनने के लिए बहुत सारे हैं। मुझे लगता है कि एसक्यूएल एक "मानक" है और पीएल / एसक्यूएल मालिक है तो यह अच्छा लगता है कि +1 @jcolebrand।
15

@ScottCher ~ इसके लिए धन्यवाद। मैं यह कहते हुए गूंगा महसूस करता हूं कि यह एक मानक है, क्योंकि अनुमोदन की मुहर के साथ इस पर मुहर लगाने के लिए एक मानक निकाय नहीं है (इसे एक संख्या दें)। लेकिन यह अच्छी तरह से परिभाषित और सहमत है। ;)
jcolebrand
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.