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.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
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
'programing' 카테고리의 다른 글
IntelliJ IDEA 자동 완성 소문자 SQL (0) | 2023.06.13 |
---|---|
명명되지 않은 구조체의 전달 선언 (0) | 2023.06.13 |
iOS: 자동 레이아웃의 다중 줄 UI 레이블 (0) | 2023.06.13 |
Firebase 메시징을 사용하여 우체부를 통해 푸시 전송 (0) | 2023.06.13 |
C++에 모든 것이 포함되어 있기 때문에 C를 배울 필요가 없다는 것이 사실입니까? (0) | 2023.06.13 |