Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

बाइंड चर और प्रतिस्थापन चर (जो मैं &&का उपयोग करके इनपुट करता हूं) के बीच अंतर क्या है?

ऐसा लगता है कि आपको बाइंड वैरिएबल . के बीच अंतर के बारे में कुछ भ्रम है 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 . के लिए सिर्फ एक संक्षिप्त नाम है ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तालिका में प्रत्येक आईडी के लिए अधिकतम लगातार वर्ष खोजें (ओरेकल एसक्यूएल)

  2. Oracle फॉर्म और रिपोर्ट के लिए वर्तमान नौकरी के उद्घाटन खोजें

  3. Oracle में एक ऑटो इंक्रीमेंट प्राथमिक कुंजी को कैसे परिभाषित करें

  4. ORA-24247:एक्सेस कंट्रोल लिस्ट (ACL) द्वारा नेटवर्क एक्सेस अस्वीकृत

  5. ORA-00936 लापता अभिव्यक्ति को कैसे हल करें