在Oracle clob列中搜索特定字符串

Jåc*_*cob 26 sql oracle clob oracle10g

如何从clob列中获取特定字符串?

我有如下数据存储在名为clob列中 product_details

CALCULATION=[N]NEW.PRODUCT_NO=[T9856] 
OLD.PRODUCT_NO=[T9852].... -- with other text
Run Code Online (Sandbox Code Playgroud)

我想NEW.PRODUCT_NO从列中搜索字符串product_details

我试过了

select * from my_table
where dbms_lob.instr(product_details,'NEW.PRODUCT_NO')>=1
Run Code Online (Sandbox Code Playgroud)

以上从我的表中提取全文.

任何帮助都非常值得赞赏.

问候

kro*_*lko 20

使用dbms_lob.instrdbms_lob.substr,就像常规的InStr和SubstStr函数一样.
看一下简单的例子:

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
Run Code Online (Sandbox Code Playgroud)


Flo*_*ita 14

好的,您可以使用与strtr相关的substr来查找字符串的起始位置

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;
Run Code Online (Sandbox Code Playgroud)


oza*_*mut 8

select *  
from TABLE_NAME
where dbms_lob.instr(COLUMNNAME,'searchtext') > 0;
Run Code Online (Sandbox Code Playgroud)