2013-07-15 2 views
13

clob 열에서 특정 문자열을 가져 오는 방법은 무엇입니까? product_detailsOracle clob 열에서 특정 문자열 검색

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

라는 CLOB 컬럼에 저장되어있는 아래로

은 내가 열에서 문자열 NEW.PRODUCT_NO 검색하고자하는 데이터가 product_details

내가

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

으로 시도

위의 테이블에서 전체 텍스트를 가져옵니다.

도움이 매우 좋습니다.

감사

+0

당신이 출력하려는 ​​문자열의 시작 위치를 찾을 INSTR에 상관 SUBSTR을 사용할 수 있습니다 만 문자열 (라인) "CALCULATION = [N] NEW.PRODUCT_NO = [T9856]"과 같은 product_details 중 하나입니까? –

+0

@FlorinGhita 네, 클로우즈 컬럼의 출력으로'NEW.PRODUCT_NO ='문자열 만 원할 것입니다. – user75ponic

답변

13

일반적인 InStr 및 SubstStr 기능과 마찬가지로 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 
-10

을 나는 그것을 바로

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

을 가지고있는 경우 경우 문자열을 포함하면 싶어 문자열 :

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

시. 이 코드는 Oracle SQL에서 테스트되지 않았습니다.

+1

Alker product_details는 clob 열입니다. 직접 SQL 검색이 작동하지 않으므로 dbms_lob 함수를 사용해야합니다. – user75ponic

+0

substr을 사용해 보셨습니까? – Alker

12

좋아, 당신은

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;