आप एसक्यूएल * प्लस में Oracle में बाँध चर और प्रतिस्थापन चर के बीच मतभेदों के बारे में कुछ भ्रम की स्थिति दिखाई देते हैं।
चलो प्रतिस्थापन चर के साथ शुरू करते हैं। प्रतिस्थापन चर SQL * प्लस के लिए अद्वितीय हैं और डेटाबेस का हिस्सा नहीं हैं। उदाहरण के लिए, यदि आप उन्हें जेडीबीसी के साथ उपयोग करने का प्रयास करते हैं तो वे काम नहीं करेंगे।
प्रतिस्थापन चर केवल पाठ का एक टुकड़ा पकड़ सकते हैं। एसक्यूएल * प्लस इनपुट की एक पंक्ति में एक प्रतिस्थापन चर का सामना करना पड़ता है, यह अपने पाठ सामग्री के साथ चर का स्थान ले लेगा:
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
ध्यान दें कि एसक्यूएल * प्लस है कि क्या इसके लिए कोई संबंध के साथ अपने पाठ मान के साथ हमारे प्रतिस्थापन चर की जगह हमें वैध एसक्यूएल दिया। उपर्युक्त उदाहरण में, हमने &subvar
के आसपास एकल उद्धरण छोड़े और यह हमें अमान्य SQL दिया, इसलिए हमें एक त्रुटि मिली।
old
और new
से शुरू होने वाली रेखाएं हमें दिखाती हैं कि हमने पहले और बाद में दर्ज की गई लाइन * एसक्यूएल * प्लस ने प्रतिस्थापन चर लागू किए हैं। new
लाइन डेटाबेस को चलाने की कोशिश की गई रेखा है।
SET VERIFY ON
और SET VERIFY OFF
का उपयोग करके आप old
और new
लाइनों के प्रदर्शन को सक्षम या अक्षम कर सकते हैं। आप 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
दोनों एक ही बात मतलब है। वे दोनों number
प्रकार के एक बाध्य चर num1
परिभाषित करते हैं। var
variable
के लिए संक्षिप्त नाम है।