2008-09-11 24 views
5

ठीक है, यह एक अस्पष्ट सवाल है, लेकिन उम्मीद है कि कोई मेरी मदद कर सकता है।ओरेकल कॉलम अलीस में डबल कोट्स

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

तो, उदाहरण के लिए, स्ट्रिंग कुछ ऐसा दिख सकता है;

SELECT table1.Col1 AS "This is an alias" FROM table1 

यह ठीक काम करता है। हालांकि, उपनाम के लिए उपयोग किया जाने वाला मान संभावित रूप से एक डबल कोट वर्ण हो सकता है, जो बाहरी उद्धरण को तोड़ देता है। मैंने सोचा कि मैं शायद उपनाम के अंदर दोहरे उद्धरणों से बच सकता हूं, लेकिन मुझे ऐसा करने का कोई भाग्य नहीं है कि ऐसा कैसे किया जाए। बैकस्लैश काम नहीं करता है, और पंक्ति में दो डबल कोट्स का उपयोग करके इस त्रुटि में परिणाम होता है;

SQL Error: ORA-03001: unimplemented feature 
03001. 00000 - "unimplemented feature" 
*Cause: This feature is not implemented. 

क्या किसी को इस मुद्दे के साथ पहले कोई अनुभव था? किसी भी अंतर्दृष्टि के लिए चीयर्स किसी के पास है।

पेज। उपनामों के आस-पास उद्धरण की आवश्यकता होती है क्योंकि उनमें रिक्त स्थान हो सकते हैं।

उत्तर

4

क्या आप सिर्फ डबल कोट्स के बजाय एक और चरित्र डाल सकते हैं और कोड में डबल कोट्स के साथ प्रतिस्थापित कर सकते हैं?

कुछ इस तरह:

SELECT table1.Col1 AS "This is |not| an alias" FROM table1 

तो बस की जगह | "

मुझे पता है कि यह एक हैक है, लेकिन मैं किसी भी बेहतर समाधान के बारे में नहीं सोच सकता ... और आप जो भी कर रहे हैं वह हैक है।" अच्छा "तरीका मूल्यों का चयन करना होगा और कॉलम नाम अलग से हैं और उन्हें अपने कोड में जोड़ते हैं। इससे चीजों को अधिक साफ कर दिया जाएगा।

1

जब मैं रन:

select 'test"columnname"' from dual 

ओरेकल इस (Oracle उत्पन्न स्तंभ नाम नोटिस) देता है:

'TESTCOLUMNNAME' 
-------------------------------- 
test"columnname 

तथ्य यह है कि Oracle की स्तंभ नाम मेरी दोहरे-उद्धरण शामिल नहीं है मुझे बताता है कि ओरेकल शायद इसका प्रतिनिधित्व नहीं कर सकता है।

सर्वोत्तम शर्त जहां तक ​​मैं देख सकता हूं कॉलम नामों का उपयोग करने से पहले अपने डेटा से डबल-कोट्स को पट्टी करना है। अफसोस की बात है कि, आपको यह भी आवश्यकता होगी कि आप उसी फ़िल्टरिंग करते हैं जब आप उन कॉलम का चयन करें, लेकिन मुझे कोई और तरीका दिखाई नहीं देता है।

0

जांच का संभावित रूप से उपयोगी क्षेत्र उद्धरण विधि को देखना होगा।

मेरा $ quotedString = $ dbh-> उद्धरण ($ स्ट्रिंग);

2

उपयोग ओरेकल बोली ऑपरेटर:

select q'#someone's quote#' from dual; 

'#' किसी भी चरित्र

0

इस प्रयास करें द्वारा बदला जा सकता है, दो एकल उद्धरण वास्तव में उत्पादन में एक दोहरे उद्धरण की तरह लग रहे:
select 1 as "University ''John Smith''" from dual;

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