2010-02-01 21 views
33

: एक प्रश्न में खड़े क्या है?कॉलन साइन ":" SQL क्वेरी में क्या करता है?

INSERT INTO MyTable (ID) VALUES (:myId) 

यह वांछित मूल्य कैसे प्राप्त करता है?

संपादित करें: इसके अलावा यह संकेत क्या कहा जाता है? मैं Google पर खोजना चाहता था, लेकिन : के लिए नाम क्या है?

+10

इसे "कोलन" कहा जाता है, एक ";" एक अर्ध-कॉलन है। –

उत्तर

36

इसे ओरेकल में bind variable कहा जाता है।

":" का नाम क्या है?

कॉलन।

4

यह named parameter है।

सी # में, आप पैरामीटर को उपसर्ग करते हैं @ (here देखें)।

+3

यह सी # का एक कार्य नहीं है। यह ADO.NET है, और इसे बदला जा सकता है। –

+0

+1 - मुझे बहुत अधिक समझ में आया। –

6

यह नामित क्वेरी पैरामीटर के लिए एक टैग है, और क्वेरी के वास्तविक वाक्यविन्यास का हिस्सा नहीं है। टैग को उस कोड में निर्दिष्ट कुछ मान के साथ प्रतिस्थापित किया गया है जो वास्तव में चलाने से पहले क्वेरी बनाता है।

44

क्या करता है के लिए भी पैरामीटर वाक्य रचना है कि ":" एक प्रश्न में लिए खड़े हो?

bind variable। बाइंड वैरिएबल एक एकल SQL कथन (चाहे कोई क्वेरी या डीएमएल) कई बार फिर से उपयोग किया जा सके, जो सुरक्षा (एसक्यूएल इंजेक्शन हमलों को अस्वीकार करके) और प्रदर्शन (आवश्यक पार्सिंग की मात्रा को कम करके) में मदद करता है।

यह वांछित मूल्य कैसे प्राप्त करता है?

ओरेकल द्वारा एक क्वेरी (या डीएमएल) निष्पादित करने से पहले, आपका प्रोग्राम एक कर्सर बनाएगा। आपका प्रोग्राम एसक्यूएल को उस कर्सर के लिए पार्स करने के लिए जारी करता है, फिर इसे SQL द्वारा संदर्भित प्रत्येक बाइंड वैरिएबल के मानों को बाध्य करना होगा। यह कैसे किया जाता है भाषा पर निर्भर करता है।

क्या संकेत कहा जाता है?

एक कोलन।

3

कॉलन : एचक्यूएल हाइबरनेट क्वेरी भाषा में प्रयोग किया जाता है ताकि यह संकेत दिया जा सके कि इसमें एक पैरामीटर शामिल है।

तो क्या इसका मतलब है कि है: SQL सिंटैक्स:

SELECT * FROM EMPLOYEE WHERE EMP_ID = empID 

HQL SYNTAX रूप में ही है:

SELECT * FROM EMPLOYEE WHERE EMP_ID = :empID 

empID मापदंडों के लिए स्थानीय चर जा रहा है ...

आशा इस मदद करता है ।

2

निम्नलिखित बयानों

select name from T_emp where id=1; 
select name from T_emp where id=2; 
select name from T_emp where id=3; 

हर बार एक बयान निष्पादित किया जाता है एक ही क्वेरी के पिछले घटनाओं के लिए Oracle चेकों पर विचार करें। यदि यह वही क्वेरी पाता है, तो यह उसी निष्पादन योजना का उपयोग करता है। यदि नहीं, तो इसे विभिन्न निष्पादन पथ मिलना है, इष्टतम निष्पादन योजना के साथ आना और इसे निष्पादित करना है।

मानव के विपरीत यह समझने के लिए पर्याप्त बुद्धिमान नहीं है कि केवल आईडी बदल गई है (उपर्युक्त उदाहरण के अनुसार)। इसलिए यह सभी संघर्षों से गुजरता है और इसे निष्पादित करता है।

लेकिन ओरेकल को बताने का एक तरीका है कि यह एक समान कथन है और यह उसी निष्पादन योजना का उपयोग कर सकता है - BIND VARIABLE। कृपया नीचे दिया गया उदाहरण पाएं:

declare 
    v_id number; 
    v_name varchar2(30); 
    type c is ref cursor; 
    c1 c; 
begin 
    for i in 1..100 
    loop 
    open c1 for 'select * from T_emp where id = :x' using i; 
    fetch c1 into v_name; 
    dbms_output.put_line('name is ' || v_name); 
    end loop; 
END; 

बाइंड चर का उपयोग करके प्रदर्शन दस गुना सुधारने में मदद मिलती है। पीएल/एसक्यूएल अपने आप पर बाइंड वैरिएबल का उपयोग करता है (आपको स्पष्ट रूप से इसे बताने की ज़रूरत नहीं है)

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