2013-07-15 7 views
13

Wie erhalten Sie eine bestimmte Zeichenfolge aus einer Clob-Spalte?Suche nach einer bestimmten Zeichenfolge in Oracle Clob-Spalte

Ich habe Daten wie unter dem in clob Spalte product_details

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

genannt gespeichert würde ich für String suchen wie NEW.PRODUCT_NO aus Spalte product_details

ich versucht habe, als

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

Das obige holt vollen Text von meiner Tabelle.

Jede Hilfe ist sehr bemerkenswert.

Grüße

+0

Sie in der Ausgabe nur ein Teil finden wollen (eine Zeile) von Produktdetails wie "BERECHNUNG = [N] NEW.PRODUCT_NO = [T9856]"? –

+0

@FlorinGhita Ja, ich möchte nur die Zeichenfolge 'NEW.PRODUCT_NO =' als Ausgabe von der Clob-Spalte. – user75ponic

Antwort

13

Verwenden Sie dbms_lob.instr und dbms_lob.substr, wie normale InStr- und SubstStr-Funktionen.
Blick auf einfaches Beispiel:

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

Wenn ich es richtig verstanden habe

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

Wenn Sie wollen Zeichenfolge, die dann die Zeichenfolge enthält:

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

Ps. Dieser Code wurde in Oracle SQL nicht getestet.

+1

Alker product_details ist eine Clob-Spalte, direkte sql-Suche würde nicht funktionieren und daher müssen wir 'dbms_lob' Funktion verwenden – user75ponic

+0

Versucht die Substr? – Alker

12

ok, können Sie substr in Korrelation INSTR verwenden, um die Ausgangsposition des String

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;