2014-01-06 2 views
2

CLOB로 채워진 SQL 테이블 열 (BINARYTEXT)이 있습니다. 이 CLOB 내에는 많은 속성이 있습니다.SQL의 텍스트 CLOB 필드에서 값을 추출하는 방법

CE.EffDate="20140106"; 
CE.CCY="EUR"; 
CE.TransactionType="STANDARDEUROPEAN"; 
CE.CAL="LON"; 

은 그래서 'STANDARDEUROPEAN'따옴표 사이에 포함 된 CE.TransactionType 속성의 값을 추출해야합니다. CLOB에는 XML이 포함되지 않으며 시작 태그 나 종료 태그가없는 위의 속성 만 포함됩니다.

나는 명령에 문자열을 지정할 때 REGEXP_SUBSTR 함수를 사용하여이 작업을 수행하는 방법을 일한 :

select REGEXP_SUBSTR('CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype 
from DUAL 

반환 = "내가 사용에이 조작 드릴 수 없습니다 STANDARDEUROPEAN

. 문자열로 CLOB이 작동하지 않습니다 : 사전에

select REGEXP_SUBSTR(BINARYTEXT,'CE.TransactionType="STANDARDEUROPEAN"', '="[^"]+') transtype 
from DUAL 

감사합니다,

,

스티브

+2

"작동하지 않음"은 애매하고 모호한 문입니다. 이런 맥락에서 무엇을 의미합니까? –

+0

안녕하세요. Dan. 정수가 필요한 이유가 확실하지 않지만 빈 정수 오류가 발생합니다. – Steve

답변

0

문자열을 추출하는 데 DBMS_LOB 패키지를 사용할 수 있습니다.

유일한 문제는 버퍼 크기로 32767 바이트 (이 예에서는 3000으로 설정 됨)로 제한됩니다. 데이터가 이보다 더 큰 경우 청크로 쿼리해야합니다. 설명서를 참조하십시오 here

찾고있는 TransactionType을 변경해야하는 경우 문자열의 해당 부분을 매개 변수로 사용하여 동적으로 sql을 작성하는 함수를 작성해야합니다.

+0

안녕하세요. 빠른 답변 감사합니다. PL/SQL을 사용하고 있지만 SQL을 사용하여 에러를받습니다 : ORA-00904 : "BINARYTEXT". "GETCLOBVAL": 식별자가 잘못되었습니다. GetCLOBVal() 함수는 XML을 직렬화하지 않습니까? – Steve

+0

큰 따옴표 안에있는 값이 바뀌므로 CE.TransactionType = "로 검색해야합니다. 'STANDARDEUROPEAN'은 예를 들어 'STANDARDNORTHAMERICAN'과 같은 또 다른 가능성 일뿐입니다. 감사합니다. – Steve

+0

사과, 네 말이 맞아. getCLOBVal()을 XMLType과 함께 사용할 수 있습니다. 이것을 반영하도록 답변을 편집했습니다. ur ref : – StevieG

0
select BINARYTEXT from your_table 
where regexp_like(dat,'^(\CE.TransactionType=)?"[^"]+"$'); 




EDIT2: 
select BINARYTEXT from your_table 
where regexp_like(dat,'^(\CE.TransactionType=)?"[^"]+"?;$'); 
+0

ur ref : http://sqlfiddle.com/#!4/fa71ae/15 – Sai

+0

안녕하세요. 사실 정보는 각 레코드에 대해 하나의 열 CLOB에 있는지? 예 기록 1 CLOB 기록이 CLOB 기록 3 CLOB 나는 데이터의 다른 모든 행을 무시 TransactionType의 가치만을 찾고 또한 CLOB. 당신이 제공 한 SQL 만 큰 따옴표를 검색하고 필요한 실제 텍스트가 아닙니다. 고마워 – Steve

+0

그래서 CE/T와 같은 o/p를 원합니다. 거래 유형 = "STANDARDEUROPEAN"? – Sai

관련 문제