2008-09-30 2 views
34

मैं एक डालने बयान जो & चरित्र भी शामिल है लिख सकता है? उदाहरण के लिए, अगर मैं डेटाबेस में एक कॉलम में "जे & जम्मू निर्माण" डालने के लिए चाहता था।कैसे एक स्ट्रिंग जो एक होता है सम्मिलित करने के लिए "और"

मुझे यकीन है कि अगर यह एक फर्क नहीं पड़ता नहीं कर रहा हूँ, लेकिन मैं Oracle 9i उपयोग कर रहा हूँ।

उत्तर

53

मैं इस भूल और इसे वापस करने के लिए फिर से आ रहा है पर रखें! मुझे लगता है कि सबसे अच्छा जवाब अब तक प्रदान किए गए प्रतिक्रियाओं का एक संयोजन है।

सबसे पहले, & sqlplus/sqldeveloper में परिवर्तनीय उपसर्ग है, इसलिए समस्या - जब ऐसा प्रतीत होता है, तो यह एक चर नाम का हिस्सा होने की उम्मीद है।

सेट डिफाईन बंद इस प्रकार & व्याख्यान sqlplus को रोक देगा।

लेकिन यदि आपको sqlplus चर और शाब्दिक & वर्णों का उपयोग करने की आवश्यकता है तो क्या होगा?

  • आप सेट पर परिभाषा चर काम
  • और सेट पर भागने & का उपयोग करता है से बचने के लिए बनाने की जरूरत है।

उदा

set define on 
set escape on 

define myvar=/forth 

select 'back\\ \& &myvar' as swing from dual; 

का उत्पादन:

old 1: select 'back\\ \& &myvar' from dual 
new 1: select 'back\ & /forth' from dual 

SWING 
-------------- 
back\ & /forth 

आप एक अलग एस्केप वर्ण उपयोग करना चाहते हैं:

set define on 
set escape '#' 

define myvar=/forth 

select 'back\ #& &myvar' as swing from dual; 

आप एक विशिष्ट एस्केप वर्ण सेट करते हैं, आप 'SP2-0272 देख सकते हैं: भागने चरित्र अल्फान्यूमेरिक या व्हाइटस्पेस नहीं हो सकता है। इसका शायद मतलब है कि आपके पास पहले से ही बचने वाला चरित्र है, और चीजें बहुत ही आत्म-संदर्भित होती हैं।

set escape off 
set escape '#' 
+0

एनपी! जैसा कि मैंने कहा, मैं इसे भूल रहा हूं, 'व्यापक उत्तर' रिकॉर्ड करने का मौका के लिए बहुत खुश हूं ;-) – tardate

+0

यह [एसक्यूएल * प्लस अकसर किये गए सवाल] (http://www.orafaq.com/wiki/SQL*Plus_FAQ# How_does_one_disable_interactive_prompting_in_SQL.2APlus.3F) एक समान उत्तर प्रदान करता है। – DavidRR

0

आप एसक्यूएल उपयोग कर रहे हैं प्लस तो मुझे लगता है कि आप आदेश

SET SCAN OFF 
16

जारी करने के लिए आप sqlplus से यह कर रहे हैं, तो

SET DEFINE OFF 

का उपयोग यह एक विशेष रूप & चलने को रोकने के लिए की जरूरत है केस

+3

SQL डेवलपर में काम करता भी –

1
SET ESCAPE ON; 
INSERT VALUES("J\&J Construction") INTO custnames; 

(अनचाहे, हाथ में ओरेकल बॉक्स नहीं है और इसमें थोड़ा समय हो गया)

+1

तो फिर तुम एक बैकस्लैश निर्दिष्ट करने के लिए एक विशेष उपचार के लिए होगा। –

2

मैंने पाया कि निम्न विकल्पों में से किसी का उपयोग कर काम करता है:

SET DEF OFF

या

SET SCAN OFF

के बारे में पता करने के लिए डेटाबेस मैं पर्याप्त जानकारी नहीं है अगर कोई बेहतर है या दूसरे की तुलना में "अधिक सही" है। इसके अलावा, अगर इनमें से किसी से भी बेहतर कुछ है, तो कृपया मुझे बताएं।

4

है एक कार्यक्रम में, हमेशा एक पैरामिट्रीकृत क्वेरी का उपयोग करें। यह एसक्यूएल इंजेक्शन हमलों के साथ-साथ एसक्यूएल पार्सर के लिए विशेष अन्य पात्रों से बचाता है।

5

सही सिंटैक्स है

set def off; 
insert into tablename values('J&J'); 
0

बंद करो एसक्यूएल का उपयोग कर/साथ ही, मैं अत्यधिक की सलाह देते हैं PL/SQL Developer यह एक एसक्यूएल उपकरण की तुलना में अधिक है।

पेज। कुछ लोग TOAD पसंद करते हैं।

+0

क्या होगा यदि आपको यूनिक्स/लिनक्स बॉक्स पर काम करने की आवश्यकता है !!! :) – Neels

5

वहाँ हमेशा chr() फ़ंक्शन, जो स्ट्रिंग के लिए एक ascii कोड धर्मान्तरित है: इस समस्या से बचने का साफ रास्ता पहले से बचने के स्थापित करने के लिए है।

यानी। कुछ की तरह: INSERT INTO तालिका मूल्यों ( concat ('जे', CHR (38), 'जे') )

7

एक वैकल्पिक समाधान, उपयोग संयोजन और chr समारोह:

select 'J' || chr(38) || 'J Construction' from dual; 
+0

आप गायब हैं || सीआर (38) के बाद –

2

आप 'जे' के रूप में ऐसी स्ट्रिंग डाल सकते हैं || ' & '||' निर्माण '। यह ठीक काम करता है।

insert into table_name (col_name) values('J'||'&'||'Construction'); 
0

देखो, एंड्रयू:

"जे & जम्मू निर्माण":

चयन concat ('जे', concat (CHR (38), 'जे निर्माण')) से दो ;

0
INSERT INTO TEST_TABLE VALUES('Jonhy''s Sport &'||' Fitness') 

इस क्वेरी के उत्पादन: Jonhy के खेल & स्वास्थ्य

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

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