2010-06-04 16 views
12

हमारे पास एक वर्कर 2 कॉलम के साथ ओरेकल 11 जी में एक टेबल है। हम एक मालिकाना प्रोग्रामिंग भाषा का उपयोग करते हैं जहां इस कॉलम को स्ट्रिंग के रूप में परिभाषित किया जाता है। अधिकतम हम इस कॉलम में 2000 वर्ण (4000 बाइट्स) स्टोर कर सकते हैं। अब आवश्यकता ऐसी है कि कॉलम को 2000 से अधिक वर्णों (वास्तव में असीमित वर्ण) को स्टोर करने की आवश्यकता है। डीबीए को रखरखाव के कारणों के लिए बीएलओबी या लंबी डेटाटाइप पसंद नहीं है।ओरेकल 11 जी में असीमित वर्णों को कैसे स्टोर करें?

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

क्या इस समस्या का कोई बेहतर समाधान है?

अद्यतन: स्वामित्व प्रोग्रामिंग भाषा प्रकार स्ट्रिंग और ब्लॉब की चर निर्धारित करने की अनुमति देता है, वहाँ CLOB का कोई विकल्प नहीं है। मैं दिए गए प्रतिक्रियाओं को समझता हूं, लेकिन मैं डीबीए नहीं ले सकता। मैं समझता हूं कि बीएलओबी या लंबे समय से विचलन करने वाले डेवलपर्स के दुःस्वप्न होंगे, लेकिन फिर भी इसकी मदद नहीं कर सकते।

अद्यतन 2: अधिकतम मैं जरूरत है 8000 अक्षर है, तो मैं सिर्फ 3 अधिक स्तंभ जोड़ें ताकि मैं 8000 वर्ण प्राप्त करने के लिए 2000 वर्ण प्रत्येक के साथ 4 स्तंभ जाएगा कर सकते हैं। तो जब पहला कॉलम भर जाता है, तो अगले कॉलम पर मूल्यों को खाली कर दिया जाएगा और इसी तरह। क्या इस डिजाइन के किसी भी दुष्प्रभाव का असर होगा? कृपया सुझाव दे।

+15

यह सुनिश्चित करता है कि डेलीडब्ल्यूटीएफ कहानी हमारी आंखों के सामने सामने आ रही है ... –

+1

ठीक है, अगर आप अपने डीबीए को बताते हैं कि आप यही करने जा रहे हैं, तो मुझे यकीन है कि वे बीएलओबी पर पुनर्विचार करने के इच्छुक होंगे या लंबा इससे बचने के लिए कुछ भी :) –

+1

कनिष्ठ डेवलपर के रूप में मेरे पास एक ही स्थिति थी और दूसरे के बाद एक मैप किए गए nvarchar पंक्तियों की एक श्रृंखला का उपयोग करने के लिए मजबूर किया गया था। सम्मिलित और अद्यतन तर्क इतना जटिल था कि एप्लिकेशन लेयर ने रखरखाव सिरदर्द को डीबीए सिरदर्द के मुकाबले बहुत खराब कर दिया था। – dkackman

उत्तर

1

बीएलओबी सबसे अच्छा समाधान है। और कुछ भी कम सुविधाजनक और एक बड़ा रखरखाव परेशान होगा।

2

आपने कोई ब्लॉब या लंबा नहीं कहा ... लेकिन सीएलओबी के बारे में क्या? 4 जीबी चरित्र डेटा।

12

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

इसके अलावा, आप CLOB प्रकार को देखने के लिए के रूप में यह अपनी आवश्यकताओं काफी अच्छी तरह से पूरा करेगा चाहते हो सकता है।

1

क्या बीएफआईएल आपके डीबीए के लिए एक व्यवहार्य वैकल्पिक डेटाटाइप है?

1

मुझे यह नहीं मिला। एक सीएलओबी उचित डेटाबेस डेटाटाइप है। यदि आपकी अजीब प्रोग्रामिंग भाषा 8000 (या जो भी) पात्रों के तारों से निपटती है, तो उसे सीएलओबी को लिखने से क्या रोकता है।

अधिक विशेष रूप से, क्या त्रुटि आप (Oracle या अपने प्रोग्रामिंग भाषा से) मिलता है यदि आप एक कॉलम एक CLOB के रूप में परिभाषित में एक 8000 चरित्र स्ट्रिंग सम्मिलित करने का प्रयास करते।

7

ओरेकल ने सूचना स्कीमा में अपनी संग्रहीत प्रक्रियाओं को संग्रहीत करने के तरीके का अनुसरण कर सकते हैं। टेक्स्ट कॉलम नामक एक तालिका को परिभाषित करें:

CREATE TABLE MY_TEXT (
IDENTIFIER INT, 
LINE  INT, 
TEXT  VARCHAR2 (4000), 
PRIMARY KEY (INDENTIFIER, LINE)); 

पहचानकर्ता कॉलम मूल तालिका की विदेशी कुंजी है। पाठ फ़ील्ड को क्रम में रखने के लिए रेखा एक साधारण पूर्णांक (अनुक्रम नहीं है) है। यह डेटा के बड़े हिस्से को

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

संपादित करें:

नीचे My_table जहां आप वर्तमान VARCHAR स्तंभ आप का विस्तार करने के लिए देख रहे हैं है। मैं इसे छोटे टेक्स्ट फ़ील्ड के लिए टेबल में रखूंगा।

CREATE TABLE MY_TABLE (
INDENTIFER INT, 
OTHER_FIELD VARCHAR2(10), 
REQUIRED_TEXT VARCHAR(4000), 
PRIMERY KEY (IDENTFIER)); 

फिर डेटा को दो टेबल में शामिल करने के लिए क्वेरी लिखें, LINE द्वारा MY_TEXT फ़ील्ड में ऑर्डर करें। आपके एप्लिकेशन को स्ट्रिंग को 2000 वर्ण भाग में विभाजित करने और उन्हें लाइन ऑर्डर में डालने की आवश्यकता होगी।

मैं इसे पीएल/एसक्यूएल प्रक्रिया में करूँगा। दोनों डालें और चुनें। पीएल/एसक्यूएल वाराकर तार 32 के वर्णों तक हो सकते हैं। जो आपकी आवश्यकताओं के लिए पर्याप्त हो सकता है या नहीं भी हो सकता है।

लेकिन इस सवाल का जवाब देने वाले हर दूसरे व्यक्ति की तरह, मैं दृढ़ता से सुझाव देता हूं कि कॉलम को सीएलओबी बनाने के लिए डीबीए को मामला बनाना होगा। कार्यक्रम परिप्रेक्ष्य से यह एक बीएलओबी होगा और इसलिए प्रबंधन के लिए आसान होगा।

+0

मुझे लगता है कि मैं जो कह रहा हूं उसे प्राप्त करता हूं। क्या आप कृपया उदाहरण के साथ थोड़ा और समझा सकते हैं? – user32262

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