ऐसा लगता है कि आपको बाइंड वैरिएबल . के बीच अंतर के बारे में कुछ भ्रम है Oracle और प्रतिस्थापन चर . में एसक्यूएल*प्लस में।
आइए प्रतिस्थापन चर के साथ शुरू करें। प्रतिस्थापन चर SQL*Plus के लिए अद्वितीय हैं और डेटाबेस का हिस्सा नहीं हैं। उदाहरण के लिए, यदि आप उन्हें JDBC के साथ उपयोग करने का प्रयास करते हैं तो वे काम नहीं करेंगे।
प्रतिस्थापन चर केवल पाठ का एक टुकड़ा रख सकते हैं। यदि SQL*Plus इनपुट की एक पंक्ति में एक प्रतिस्थापन चर का सामना करता है, तो यह चर को उसकी पाठ्य सामग्री से बदल देगा:
SQL> define subvar=X SQL> select * from dual where dummy = &subvar; old 1: select * from dual where dummy = &subvar new 1: select * from dual where dummy = X select * from dual where dummy = X * ERROR at line 1: ORA-00904: "X": invalid identifier
ध्यान दें कि SQL*Plus ने हमारे प्रतिस्थापन चर को उसके टेक्स्ट मान से बदल दिया है, इस बात की परवाह किए बिना कि उसने हमें वैध SQL दिया है या नहीं। ऊपर के उदाहरण में, हमने &subvar
. के आसपास के सिंगल कोट्स को छोड़ दिया है और इसने हमें अमान्य SQL दिया, इसलिए हमें एक त्रुटि मिली।
old
. से शुरू होने वाली पंक्तियाँ और new
हमें वह लाइन दिखाएं जो हमने एसक्यूएल*प्लस से पहले और बाद में दर्ज की थी और प्रतिस्थापन चर को लागू किया था। new
लाइन वह लाइन है जिसे डेटाबेस ने चलाने की कोशिश की।
आप old
. के प्रदर्शन को सक्षम या अक्षम कर सकते हैं और new
SET VERIFY ON
. का उपयोग करने वाली लाइनें और SET VERIFY OFF
. आप SET DEFINE ON
. का उपयोग करके प्रतिस्थापन चरों के प्रतिस्थापन को चालू या बंद भी कर सकते हैं और SET DEFINE OFF
।
यदि हम प्रतिस्थापन चर का उपयोग करके उपरोक्त क्वेरी को चलाना चाहते हैं, तो हमें इसके चारों ओर उद्धरण रखना चाहिए:
SQL> select * from dual where dummy = '&subvar'; old 1: select * from dual where dummy = '&subvar' new 1: select * from dual where dummy = 'X' D - X
अगर &subvar
ऐसा होता है कि एक स्ट्रिंग होती है जो एक मान्य संख्या थी (उदा. 5
), तो हम उद्धरणों का उपयोग किए बिना दूर हो सकते हैं, लेकिन ऐसा केवल इसलिए है क्योंकि &subvar
टेक्स्ट निकाल रहे हैं और इसे 5
. टेक्स्ट से बदलें हमें मान्य SQL देने के लिए होता है।
उदाहरण के लिए, मान लें कि हमारे पास test
. नामक एक टेबल है इसमें निम्नलिखित डेटा के साथ:
A ---------- 1 2 3 4 5
तब हम कर सकते हैं
SQL> define subvar=5 SQL> select * from test where a = &subvar; old 1: select * from test where a = &subvar new 1: select * from test where a = 5 A ---------- 5
दूसरी ओर, बाइंड वैरिएबल के प्रकार होते हैं। वे साधारण पाठ मान नहीं हैं। उनके मान डेटाबेस को भेजे जाते हैं, और डेटाबेस उनके मान भी सेट कर सकता है।
SQL> variable bindvar varchar2(1); SQL> exec :bindvar := 'X'; PL/SQL procedure successfully completed.
जब आप इसका उपयोग करना चाहते हैं तो आप बाइंड वैरिएबल के आसपास उद्धरण नहीं डालते हैं:
SQL> select * from dual where dummy = :bindvar; D - X SQL> select * from dual where dummy = ':bindvar'; no rows selected
ऊपर के दूसरे उदाहरण में, हमें कोई पंक्ति वापस नहीं मिली क्योंकि DUAL
तालिका में DUMMY
. के साथ कोई पंक्ति नहीं है टेक्स्ट युक्त कॉलम :bindvar
।
यदि आप बाइंड वैरिएबल को गलत प्रकार का मान निर्दिष्ट करने का प्रयास करते हैं तो आपको एक त्रुटि मिलेगी:
SQL> variable bindvar number; SQL> exec :bindvar := 'X'; BEGIN :bindvar := 'X'; END; * ERROR at line 1: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1
बाइंड वैरिएबल डेटाबेस का एक मानक हिस्सा हैं, और आप उनका उपयोग JDBC या आपके द्वारा चुने गए डेटाबेस से कनेक्ट करने की किसी भी विधि के साथ कर सकते हैं।
अंत में, variable num1 number
और var num1 number
दोनों का मतलब एक ही है। वे दोनों एक बाइंड वैरिएबल को परिभाषित करते हैं num1
प्रकार का number
. var
variable
. के लिए सिर्फ एक संक्षिप्त नाम है ।