मैं SQL प्लस से चलने वाली SQL स्क्रिप्ट में ampersands को कैसे अनदेखा कर सकता हूं?


104

मेरे पास एक एसक्यूएल स्क्रिप्ट है जो एक एंपर्सैंड (&) युक्त टिप्पणी के साथ एक पैकेज बनाती है। जब मैं एसक्यूएल प्लस से स्क्रिप्ट चलाता हूं, तो मुझे स्ट्रिंग के लिए एक विकल्प मूल्य दर्ज करने के लिए प्रेरित किया जाता है, जिसके साथ शुरुआत होती है। मैं इस सुविधा को कैसे अक्षम करूं ताकि SQL प्लस एम्परसेंड को अनदेखा कर दे?

जवाबों:


181

यह आपके लिए काम कर सकता है:

set define off

अन्यथा एम्परसैंड को एक स्ट्रिंग के अंत में होना चाहिए,

'StackOverflow &' || ' you'

संपादित करें: जब मैं बचत कर रहा था तो मैं खुश था ... यह एक ब्लॉग से संदर्भित था ।


2
आप इसे glogin.sql साइट प्रोफ़ाइल सेटअप फ़ाइल या login.sql उपयोगकर्ता प्रोफ़ाइल सेटअप फ़ाइल में भी निर्दिष्ट कर सकते हैं
David Aldridge

यदि आप प्रतिस्थापन चर में रुचि नहीं रखते हैं तो यह सबसे सरल उपाय है।
Drumbeg

हमेशा एक जीवन रक्षक समाधान :) धन्यवाद।
अंजना सिल्वा

25

यदि आप कभी-कभी प्रतिस्थापन चर का उपयोग करते हैं, तो आप परिभाषित बंद नहीं करना चाहते हैं। इन मामलों में आप एम्परसैंड को उसके संख्यात्मक समकक्ष से रूपांतरित कर सकते हैं || Chr(38) ||या इसमें एकल वर्ण के रूप में जोड़ सकते हैं || '&' ||


विशिष्ट परिदृश्य एक पैकेज है जिसके स्रोत में एक टिप्पणी में एक एम्परसेंड शामिल है। मैं यह नहीं देखता कि मैं इसके लिए संघटन या प्रतिस्थापन का उपयोग कैसे करूँगा।
जोशएल

जोश, आप सही हैं मैंने इसे पूर्णता के लिए सूचीबद्ध किया है। यह आपके प्रश्न से संबंधित है भले ही यह सीधे आपके विशिष्ट प्रश्न का उत्तर न दे।
लेह रिफ़ेल

इसने वास्तव में मेरी मदद की।
आर्किमिडीज ट्रेजानो

13

मैंने नीचे दिए गए कोड के साथ हल किया:

set escape on

और बाईं ओर एक \ डाल दिया 'value_\&_intert'

Att


इसने मेरे लिए काम किया। मैं कमांड का उपयोग कर रहा था comment on column tablename.columnname is 'war ' || chr(38) || ' peace'लेकिन यह मुझे त्रुटि दे रहा था ORA-01780: string literal required
9

6

आप विशेष वर्ण सेट कर सकते हैं, जिसे स्क्रिप्ट के निष्पादन के लिए देखा जाता है, उपयोग करने के माध्यम से दूसरे मूल्य पर SET DEFINE <1_CHARACTER>

डिफ़ॉल्ट रूप से, DEFINE फ़ंक्शन स्वयं चालू है, और यह सेट है और

इसे बंद किया जा सकता है - जैसा कि पहले ही उल्लेख किया गया है - लेकिन इसे अलग मूल्य पर सेट करने के माध्यम से भी टाला जा सकता है। इस बात से अवगत रहें कि आपने इसे किस चिन्ह में सेट किया है। नीचे दिए गए उदाहरण में, मैंने # वर्ण चुना है, लेकिन वह विकल्प केवल एक उदाहरण है।

SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value

'AVALUE#VAR_HASH'
-----------------
a value #var_hash

SQL> set define #
SQL> r
  1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value

'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value

SQL>

1
मैंने हाल ही में इस दृष्टिकोण का उपयोग किया है। मुझे यह पसंद है क्योंकि मुझे अपने पीएल / एसक्यूएल पैकेज की सामग्री को बदलने की आवश्यकता नहीं है।
Drumbeg

3

सेट डिफाइंड <- यह सबसे अच्छा समाधान है जो मैंने पाया

मैंने भी कोशिश की ...

निर्धारित करें}

मैं एम्परसैंड वर्णों वाले कई रिकॉर्ड सम्मिलित करने में सक्षम था 'और' लेकिन मैं पाठ में '}' वर्ण का उपयोग नहीं कर सकता हूं इसलिए मैंने "सेट डिफाइंड" का उपयोग करने का फैसला किया और सब कुछ उसी तरह काम करता है जैसे यह होना चाहिए।


2

इस अच्छे FAQ के अनुसार कुछ समाधान हैं।

\यदि आप टिप्पणी को संशोधित कर सकते हैं तो आप बैकस्लैश चरित्र के साथ एम्परसेंड से बचने में सक्षम हो सकते हैं।


2
बैकस्लैश एस्केप SQL * प्लस या SQLDeveloper में काम नहीं करता है
जिम टफ

2
@JimTough इसे सक्रिय करने के बाद करता हैset escape on
डेविड बालैसिक

0

मैंने कब कॉलम = 'कहीं और अधिक पाठ' के साथ एक CASE स्टेटमेंट दिया था ...।

मैंने इसे WHEN कॉलम = 'someext' से बदल दिया || सीएचआर (38) || 'अधिक पाठ' तब ...

तुम भी कभी 'और फिर पाठ' अधिक 'स्तंभ स्तंभ का उपयोग कर सकते हैं ...

(_ एक एकल वर्ण के लिए वाइल्डकार्ड है)

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