programing

Oracle clob 열에서 특정 문자열 검색

subpage 2023. 6. 13. 22:18
반응형

Oracle clob 열에서 특정 문자열 검색

클럽 칼럼에서 특정 문자열을 가져오는 방법은 무엇입니까?

나는 아래와 같은 데이터를 가지고 있는데, clob 컬럼에 저장되어 있습니다.product_details

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

문자열을 검색하고 싶습니다.NEW.PRODUCT_NO종대에서product_details

로 노력해 왔습니다.

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

위의 내용은 내 표에서 전체 텍스트를 가져옵니다.

어떤 도움이든 대단히 감사합니다.

안부 전해요

일반 InStr 및 SubsStr 함수와 마찬가지로 dbms_lob.instrdbms_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
select *  
from TABLE_NAME
where dbms_lob.instr(COLUMNNAME,'searchtext') > 0;

좋아요, 당신은 당신의 문자열의 시작 위치를 찾기 위해 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;

아래 코드는 Oracle clob 열에서 특정 문자열을 검색하는 데 사용할 수 있습니다.

select *  
from RLOS_BINARY_BP
where dbms_lob.instr(DED_ENQ_XML,'2003960067') > 0;

어디에RLOS_BINARY_BP테이블 이름 및DED_ENQ_XML는 Oracle 데이터베이스의 열 이름(데이터 유형이 CLOB)입니다.

@Florin Gita가 제안한 방식대로 사용할 수 있습니다.그러나 dbms_lob.substr은 함수에서 4000자로 제한됩니다. 예:

dbms_lob.substr(clob_value_column,4000,1)

그렇지 않으면 ORA-22835를 찾을 수 있습니다(버퍼가 너무 작음).

다음과 같은 다른 sql 방법을 사용할 수 있습니다.

SELECT * FROM   your_table WHERE  clob_value_column LIKE '%your string%';

참고: 전체 테이블 검색을 유발하는 것과 같은 위의 두 가지 방법 모두와 관련된 성능 문제가 있으므로 Oracle 텍스트 색인에 대해서도 고려해 보십시오.

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ccapp/indexing-with-oracle-text.html

CLOB 값을 VARCHAR 값으로 캐스팅하고 쿼리를 다음과 같이 만들 수 있습니다.

언급URL : https://stackoverflow.com/questions/17649011/search-for-a-particular-string-in-oracle-clob-column

반응형