ORA-22835: बफ़र बहुत छोटा है और ओरा-25137: डेटा मूल्य सीमा से बाहर

0

सवाल

हम कर रहे हैं का उपयोग कर एक सॉफ्टवेयर है कि सीमित Oracle क्षमताओं. मैं की जरूरत करने के लिए फिल्टर के माध्यम से एक CLOB क्षेत्र सुनिश्चित करने के द्वारा, यह एक विशिष्ट मूल्य है. आम तौर पर, के बाहर, इस सॉफ्टवेयर को मुझे क्या करना होगा की तरह कुछ:

DBMS_LOB.SUBSTR(t.new_value) = 'Y'

हालांकि, यह समर्थित नहीं है, तो मैं कर रहा हूँ का उपयोग करने का प्रयास CAST के बजाय. मैंने कोशिश की है कई अलग अलग प्रयास करता है, लेकिन अब तक इन कर रहे हैं मैं क्या पाया:

सॉफ्टवेयर में निर्मित एक क्वेरी परीक्षक/वैलिडेटर और इन लोगों को कर रहे हैं यह पता चलता है के रूप में अमान्य:

DBMS_LOB.SUBSTR(t.new_value)
CAST(t.new_value AS VARCHAR2(10))
CAST(t.new_value AS NVARCHAR2(10))

हालांकि, सत्यापनकर्ता को स्वीकार करता है, इन:

CAST(t.new_value AS VARCHAR(10))
CAST(t.new_value AS NVARCHAR(10))
CAST(t.new_value AS CHAR(10))

दुर्भाग्य से, भले ही सत्यापनकर्ता सुविधा देता है, इन लोगों के माध्यम से जाना है, चल रहा है, जब क्वेरी डेटा लाने के लिए, मैं ORA-22835: Buffer too small का उपयोग करते समय VARCHAR या NVARCHAR. और मैं ORA-25137: Data value out of range का उपयोग करते समय CHAR.

वहाँ रहे हैं अन्य तरीकों से मैं कर सकता की कोशिश की जाँच करने के लिए है कि मेरे CLOB क्षेत्र में एक विशिष्ट मूल्य है, जब डेटा को छानने? यदि नहीं, तो मैं कैसे ठीक मेरे वर्तमान मुद्दों?

database oracle
2021-11-23 16:17:40
2

सबसे अच्छा जवाब

1

त्रुटि आप कर रहे हैं हो रही है इंगित करता है कि ओरेकल की कोशिश कर रहा है को लागू करने के लिए CAST(t.new_value AS VARCHAR(10)) करने के लिए एक पंक्ति, जहां new_value 10 से अधिक अक्षर. समझ में आता है कि दिए गए अपने विवरण है कि new_value एक सामान्य लेखा परीक्षा क्षेत्र है कि मूल्यों में से एक बड़ी संख्या में विभिन्न तालिकाओं की एक किस्म के साथ डेटा की लंबाई. यह देखते हुए कि, आप की आवश्यकता होगी करने के लिए संरचना में क्वेरी का एक तरीका है कि सेना अनुकूलक को कम करने के लिए सेट पंक्तियाँ आप आवेदन कर रहे हैं के cast करने के लिए नीचे करने के लिए बस, जहां उन new_value सिर्फ एक ही चरित्र को लागू करने से पहले cast.

नहीं जानने के किस तरह के स्कोप सॉफ्टवेयर आप उपयोग कर रहे हैं प्रदान करता है के लिए संरचना अपने कोड, मैं नहीं हूँ यकीन है कि क्या विकल्प तुम वहाँ है. हो सकता है कि बारे में पता है के आधार पर कैसे मजबूत आप की जरूरत है इस के लिए, अनुकूलक है काफी एक बिट से चुनने के लिए लचीलापन लागू करने के लिए predicates और कार्यों पर प्रक्षेपण एक मनमाना क्रम में. तो भी अगर तुम एक दृष्टिकोण है कि काम करता है एक बार, यह काम करना बंद कर सकते जब भविष्य में आंकड़े बदलने के लिए या डेटाबेस नवीनीकृत किया गया है और ओरेकल का फैसला करता है, का चयन करने के लिए एक अलग योजना है.

2021-11-24 16:59:52
0

इस का उपयोग कर के रूप में नमूना डेटा

create table tab1(col clob);
insert into tab1(col) values (rpad('x',3000,'y'));

आप की जरूरत है का उपयोग करने के लिए dbms_lob.substr(col,1) प्राप्त करने के लिए पहली चरित्र (डिफ़ॉल्ट रूप से offset= 1)

select dbms_lob.substr(col,1) from tab1;

DBMS_LOB.SUBSTR(COL,1)
----------------------
x

ध्यान दें कि डिफ़ॉल्ट amount (= लंबाई) के substring है 32767 तो केवल का उपयोग कर DBMS_LOB.SUBSTR(COL) वापस आ जाएगी और अधिक से अधिक आप की उम्मीद है.

CAST के लिए CLOB करता है नहीं में कटौती करने के लिए स्ट्रिंग casted की लंबाई, लेकिन (के रूप में आप के अनुसार) रिटर्न अपवाद ORA-25137: Data value out of range यदि मूल स्ट्रिंग है longert कि casted लंबाई.

के रूप में प्रलेखित के लिए CAST बयान

कास्ट नहीं करता है सीधे में से किसी का समर्थन LOB डेटा प्रकार है । जब आप का उपयोग करें कच्चा परिवर्तित करने के लिए एक CLOB मूल्य में कोई वर्ण डेटा प्रकार या एक बूँद मूल्य में कच्चे डेटा प्रकार, डेटाबेस परोक्ष धर्मान्तरित कार्य के लिए मूल्य चरित्र या कच्चे डेटा और तो स्पष्ट रूप से डाले जिसके परिणामस्वरूप मूल्य में लक्ष्य डेटा प्रकार है । यदि जिसके परिणामस्वरूप मूल्य की तुलना में बड़ा है लक्ष्य प्रकार है, तो डेटाबेस त्रुटि देता है है ।

2021-11-23 17:06:33

दुर्भाग्य से, के बाद भी जोड़ने ऑफसेट, क्वेरी सत्यापनकर्ता पहचान नहीं है DBMS_LOB.SUBSTR() तो मैं का उपयोग नहीं कर सकते कि. मैंने सोचा था कि CAST में सक्षम है करने के लिए स्ट्रिंग में कटौती, क्योंकि हम भी का उपयोग करने के लिए एक समाधान के लिए TRUNC: CAST(CAST(date_field AS VARCHAR(9)) AS DATE) और यह काम करता है. इसे से छुटकारा हो जाता है के समय भाग. मैं उम्मीद कर रहा था, हम कुछ कर सकता है इसी तरह इस एक के लिए.
Patrick Gregorio

हाँ, यह काम करता है के लिए VARCHAR लेकिन unfortunatelly के लिए नहीं CLOB मैं अद्यतन का जवाब है । @PatrickGregorio
Marmite Bomber

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में