2013-07-15 6 views
13

में किसी विशेष स्ट्रिंग के लिए खोजें क्लॉब कॉलम से कोई विशेष स्ट्रिंग कैसे प्राप्त करें?ओरेकल क्लोब कॉलम

मैं जो नीचे के रूप में product_details

CALCULATION=[N]NEW.PRODUCT_NO=[T9856] 
OLD.PRODUCT_NO=[T9852].... -- with other text 

बुलाया CLOB स्तंभ में संग्रहीत किया जाता है डेटा है मैं स्तंभ से स्ट्रिंग NEW.PRODUCT_NO के लिए खोज करना चाहते हैं product_details

मैं

select * from my_table 
where dbms_lob.instr(product_details,'NEW.PRODUCT_NO')>=1 

के रूप में की कोशिश की है उपरोक्त मेरी तालिका से पूरा पाठ प्राप्त करता है।

कोई भी सहायता अत्यधिक सराहनीय है।

सादर

+0

आप उत्पादन में चाहते हैं उस तक केवल सबस्ट्रिंग (एक लाइन) product_details जैसे "CALCULATION = [N] NEW.PRODUCT_NO = [T9856]"? –

+0

@FlorinGhita हां मैं क्लॉब कॉलम से आउटपुट के रूप में केवल 'NEW.PRODUCT_NO = 'स्ट्रिंग चाहता हूं। – user75ponic

उत्तर

13

dbms_lob.instr और dbms_lob.substr का उपयोग करें, जैसे नियमित इनएसआरटी और सबस्टएसआरटी कार्यों। सरल उदाहरण पर
देखो:

SQL> create table t_clob(
    2 id number, 
    3 cl clob 
    4 ); 

Tabela zosta│a utworzona. 

SQL> insert into t_clob values (1, ' xxxx abcd xyz qwerty 354657 [] '); 

1 wiersz zosta│ utworzony. 

SQL> declare 
    2 i number; 
    3 begin 
    4 for i in 1..400 loop 
    5  update t_clob set cl = cl || ' xxxx abcd xyz qwerty 354657 [] '; 
    6 end loop; 
    7 update t_clob set cl = cl || ' CALCULATION=[N]NEW.PRODUCT_NO=[T9856] OLD.PRODUCT_NO=[T9852].... -- with other text '; 
    8 for i in 1..400 loop 
    9  update t_clob set cl = cl || ' xxxx abcd xyz qwerty 354657 [] '; 
10 end loop; 
11 end; 
12/

Procedura PL/SQL zosta│a zako˝czona pomyťlnie. 

SQL> commit; 

Zatwierdzanie zosta│o uko˝czone. 
SQL> select length(cl) from t_clob; 

LENGTH(CL) 
---------- 
    25717 

SQL> select dbms_lob.instr(cl, 'NEW.PRODUCT_NO=[') from t_clob; 

DBMS_LOB.INSTR(CL,'NEW.PRODUCT_NO=[') 
------------------------------------- 
           12849 

SQL> select dbms_lob.substr(cl, 5,dbms_lob.instr(cl, 'NEW.PRODUCT_NO=[') + length('NEW.PRODUCT_NO=[')) new_product 
    2 from t_clob; 

NEW_PRODUCT 
-------------------------------------------------------------------------------- 
T9856 
-10

अगर मैं यह सही

select * from my_table where product_details = 'NEW.PRODUCT_NO' 

मिला आप चाहते स्ट्रिंग जो स्ट्रिंग तो शामिल हैं:

SELECT * FROM MY_TABLE WHERE product_details = '%NEW.PRODUCT_NO%'; 

Ps। इस कोड ने ओरेकल एसक्यूएल में परीक्षण नहीं किया है।

+1

अल्कर product_details एक क्लोब कॉलम है, सीधी एसक्यूएल खोज काम नहीं करेगी और इसलिए हमें 'dbms_lob' फ़ंक्शन – user75ponic

+0

का उपयोग करना होगा सबस्ट्रेट का प्रयास किया? – Alker

12

ठीक है, आप substr सहसंबंध में Instr लिए उपयोग कर सकते हैं अपने स्ट्रिंग की प्रारंभिक स्थिति

select 
    dbms_lob.substr(
     product_details, 
     length('NEW.PRODUCT_NO'), --amount 
     dbms_lob.instr(product_details,'NEW.PRODUCT_NO') --offset 
     ) 
from my_table 
where dbms_lob.instr(product_details,'NEW.PRODUCT_NO')>=1; 
संबंधित मुद्दे