2011-10-16 10 views
6

इन दो परिवर्तनीय घोषणाओं के बीच क्या अंतर है?बाइंड वैरिएबल और वेरिएबल जो मैं इनपुट का उपयोग कर इनपुट करता हूं और अंतर के बीच क्या अंतर है?

1: num number:='&&num';
2: variable num1 number;

दोनों ही मामलों में मैं अन्य फ़ाइलों में &num या &&num का उपयोग कर भी, द्वारा और बाँध चर :num1 के मामले में num संदर्भित कर सकते हैं के बाद से।

इसके अलावा मेरे पास एक और भ्रम है: क्या निम्न में से कोई भी कथन किसी भी तरह से भिन्न है, क्या वे दोनों मान्य हैं और क्या उनका मतलब एक ही बात है?

1: variable num1 number;
2: var num1 number;

उत्तर

29

आप एसक्यूएल * प्लस में 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 परिभाषित करते हैं। varvariable के लिए संक्षिप्त नाम है।

संबंधित मुद्दे