पीएल / एसक्यूएल, एक स्ट्रिंग में एकल उद्धरण से कैसे बच सकता है?


114

ओरेकल पीएल / एसक्यूएल में, एक स्ट्रिंग में एकल उद्धरण से कैसे बचा जाए? मैंने इस तरह से कोशिश की, यह काम नहीं करता है।

declare
  stmt varchar2(2000);
begin
  for i in 1021 .. 6020
  loop
    stmt := 'insert into MY_TBL (Col) values(\'ER0002\')';

    dbms_output.put_line(stmt);
    execute immediate stmt;
    commit;
  end loop;
exception
  when others then
    rollback;
    dbms_output.put_line(sqlerrm);
end;
/

जवाबों:


184

आप शाब्दिक उद्धरण का उपयोग कर सकते हैं:

stmt := q'[insert into MY_TBL (Col) values('ER0002')]';

शाब्दिक के लिए प्रलेखन यहाँ पाया जा सकता है

वैकल्पिक रूप से, आप एक उद्धरण को दर्शाने के लिए दो उद्धरणों का उपयोग कर सकते हैं:

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';

क्यू सिंटैक्स के साथ शाब्दिक उद्धृत तंत्र अधिक लचीला और पठनीय है, आईएमओ।


19

यहाँ एक ब्लॉग पोस्ट है जिसे स्ट्रिंग्स में टिक से बचने में मदद करनी चाहिए।

यहाँ कहा पोस्ट से सबसे सरल विधि है:

सबसे सरल और सबसे अधिक उपयोग किया जाने वाला तरीका दोनों पक्षों में दो एकल> उद्धरण चिह्नों के साथ एकल उद्धरण चिह्न का उपयोग करना है।

दोहरे से 'परीक्षण एकल उद्धरण' 'का चयन करें;

उपरोक्त कथन का उत्पादन होगा:

परीक्षण एकल उद्धरण '

केवल यह कहते हुए कि आपको किसी एकल उद्धरण वर्ण को मुद्रित करने के लिए अतिरिक्त एकल उद्धरण वर्ण की आवश्यकता होती है। यदि आप दो एकल उद्धरण वर्ण डालते हैं, तो Oracle एक प्रिंट करेगा। पहला> एक बच चरित्र की तरह काम करता है।

यह Oracle में एकल उद्धरण चिह्नों को मुद्रित करने का सबसे सरल तरीका है। लेकिन यह तब जटिल होगा जब आपको केवल एक के बजाय उद्धरण चिह्नों का एक सेट प्रिंट करना होगा। इस> स्थिति में निम्न विधि ठीक काम करती है। लेकिन इसके लिए कुछ और टाइपिंग लेबर की आवश्यकता होती है।


13

ऊपर दिए गए DCookie के उत्तर के अलावा, आप किसी एकल उद्धरण के लिए chr (39) का भी उपयोग कर सकते हैं।

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

यहाँ एक बहुत ही त्वरित उदाहरण है:

कहते हैं कि हमारे पास एक बहुत ही सरल तालिका है, ग्राहक, जिसमें 2 कॉलम हैं, FirstName और LastName। हमें ग्राहक 2 में डेटा को स्थानांतरित करने की आवश्यकता है, इसलिए हमें INSERT विवरणों का एक समूह तैयार करना होगा।

Select 'INSERT INTO Customers2 (FirstName, LastName) ' ||
       'VALUES (' || chr(39) || FirstName || chr(39) ',' || 
       chr(39) || LastName || chr(39) || ');' From Customers;

मैंने इसे एक वातावरण से दूसरे वातावरण में स्थानांतरित करते समय, या किसी वातावरण को शीघ्रता से पुनर्निर्माण करते समय बहुत उपयोगी पाया है।


0

EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'; मेरे लिए काम किया। varchar/ बंद करने के stringसाथ एकल उद्धरण के दो जोड़े ने चाल चली। usingकीवर्ड का उपयोग करने के लिए अन्य विकल्प हो सकता है EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'; याद रखें usingकि यदि आप उपयोग कर रहे हैं तो कीवर्ड काम नहीं करेगाEXECUTE IMMEDIATE डीडीएल के मापदंडों को निष्पादित करने के लिए , हालांकि, उद्धरण का उपयोग करना डीडीएल के लिए काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.