sql - regexp_substr - Buscar una cadena en particular en la columna de clob de Oracle
oracle regexp_substr comma separated (3)
Utilice dbms_lob.instr y dbms_lob.substr , al igual que las funciones normales InStr y SubstStr.
Mira el ejemplo simple:
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
¿Cómo obtener una cadena en particular de una columna clob?
Tengo los datos que se encuentran a continuación, que se almacenan en una columna de clob llamada product_details
CALCULATION=[N]NEW.PRODUCT_NO=[T9856]
OLD.PRODUCT_NO=[T9852].... -- with other text
Me gustaría buscar la cadena NEW.PRODUCT_NO
de la columna product_details
Lo he intentado como
select * from my_table
where dbms_lob.instr(product_details,''NEW.PRODUCT_NO'')>=1
Lo anterior recoge el texto completo de mi tabla.
Cualquier ayuda es altamente apreciable.
Saludos
ok, puede usar substr en correlación con instr para encontrar la posición inicial de su cadena
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;
select *
from TABLE_NAME
where dbms_lob.instr(COLUMNNAME,''searchtext'') > 0;