[SQL] 오라클의 CLOB 컬럼을 조회하는 방법
SQL오라클의 CLOB 컬럼을 조회하는 방법
나는 CLOB 데이터 유형입니다 몇 가지 열이 쿼리를 실행하기 위해 노력하고있어. 내가 정상과 같은 쿼리를 실행하는 경우, 그 모든 필드는 값으로 (CLOB)가 있습니다.
나는 DBMS_LOB.substr (열)를 사용하여 시도와 나는 오류
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
어떻게 CLOB 열을 조회 할 수 있습니다?
해결법
-
==============================
1.CLOB로 컬럼의 문자열을 얻고 크기 / 버퍼 제한이 쿼리 도구를 사용하는 경우 때때로 더 큰 크기로 버퍼를 설정해야합니다. 예를 들어 SQL을 사용하여 플러스 기본값은 4000입니다 10000로 설정하기 위해 SET BUFFER 10000을 사용하는 동안.
CLOB로 컬럼의 문자열을 얻고 크기 / 버퍼 제한이 쿼리 도구를 사용하는 경우 때때로 더 큰 크기로 버퍼를 설정해야합니다. 예를 들어 SQL을 사용하여 플러스 기본값은 4000입니다 10000로 설정하기 위해 SET BUFFER 10000을 사용하는 동안.
DBMS_LOB.substr 명령을 실행하면 당신은 또한 당신이 반환을 원하고있는 오프셋 문자의 양을 지정할 수 있습니다. 버퍼를위한 작은 충분한 양을 제한 할 수 DBMS_LOB.substr (열, 3000)를 사용하여 그래서.
SUBSTR 명령에 대한 자세한 정보를 원하시면 Oracle 설명서를 참조하십시오
DBMS_LOB.SUBSTR ( lob_loc IN CLOB CHARACTER SET ANY_CS, amount IN INTEGER := 32767, offset IN INTEGER := 1) RETURN VARCHAR2 CHARACTER SET lob_loc%CHARSET;
-
==============================
2.이 작품
이 작품
select DBMS_LOB.substr(myColumn, 3000) from myTable
-
==============================
3.내 오라클 데이터베이스의 HugeClob와 다른 상태로 실행 않았다. dbms_lob.substr 만 기능, 전에서 4000의 값을 허용 :
내 오라클 데이터베이스의 HugeClob와 다른 상태로 실행 않았다. dbms_lob.substr 만 기능, 전에서 4000의 값을 허용 :
dbms_lob.substr(column,4000,1)
너무 컸다 내 HughClob, 나는 선택에서 두 개의 호출을 사용했다 :
select dbms_lob.substr(column,4000,1) part1, dbms_lob.substr(column,4000,4001) part2 from .....
나는 단순히 PART1과 파트 2를 연결된하고 이메일로 전송 그래서 나는 자바 응용 프로그램에서 호출되었다.
-
==============================
4.큰 CLOB의 선택을 위해도 사용할 수 있습니다 :
큰 CLOB의 선택을 위해도 사용할 수 있습니다 :
foo는 FROM SELECT dbms_lob.substr (COLUMN_NAME, dbms_lob.getlength (COLUMN_NAME), 1)
-
==============================
5.그것은 CLOB가 있다면 왜 우리는 열을 TO_CHAR 수 없으며 정상적으로 검색?
그것은 CLOB가 있다면 왜 우리는 열을 TO_CHAR 수 없으며 정상적으로 검색?
테이블 만들기
CREATE TABLE MY_TABLE(Id integer PRIMARY KEY, Name varchar2(20), message clob);
이 표에 몇 가지 기록을 작성
INSERT INTO MY_TABLE VALUES(1,'Tom','Hi This is Row one'); INSERT INTO MY_TABLE VALUES(2,'Lucy', 'Hi This is Row two'); INSERT INTO MY_TABLE VALUES(3,'Frank', 'Hi This is Row three'); INSERT INTO MY_TABLE VALUES(4,'Jane', 'Hi This is Row four'); INSERT INTO MY_TABLE VALUES(5,'Robert', 'Hi This is Row five'); COMMIT;
크롭 열에서 검색
SELECT * FROM MY_TABLE where to_char(message) like '%e%';
결과
ID NAME MESSAGE =============================== 1 Tom Hi This is Row one 3 Frank Hi This is Row three 5 Robert Hi This is Row five
-
==============================
6.또 다른 옵션은 CLOB 열을 선택해야 그 기능 매번 함수를 작성하고 호출하는 것입니다.
또 다른 옵션은 CLOB 열을 선택해야 그 기능 매번 함수를 작성하고 호출하는 것입니다.
create or replace function clob_to_char_func (clob_column in CLOB, for_how_many_bytes in NUMBER, from_which_byte in NUMBER) return VARCHAR2 is begin Return substrb(dbms_lob.substr(clob_column ,for_how_many_bytes ,from_which_byte) ,1 ,for_how_many_bytes); end;
그와 같은 기능을 호출;
SELECT tocharvalue, clob_to_char_func(tocharvalue, 1, 9999) FROM (SELECT clob_column AS tocharvalue FROM table_name);
-
==============================
7.대답에 추가합니다.
대답에 추가합니다.
declare v_result clob; begin ---- some operation on v_result dbms_lob.substr( v_result, 4000 ,length(v_result) - 3999 ); end; /
dbms_lob.substr에서
첫번째 매개 변수는 추출 할 CLOB입니다.
두 번째 매개 변수는 압축을 얼마나 CLOB의 길이입니다.
세 번째 매개 변수는 추출 할 단어에서이다.
내가 지난 4000 문자를 할 수 있도록 위의 예에서 나는 나의 CLOB 크기 이상 50,000 알고있다.
-
==============================
8.당신은 SQL을 사용하는 경우 * 플러스 다음을 시도 ...
당신은 SQL을 사용하는 경우 * 플러스 다음을 시도 ...
set long 8000 select ...
from https://stackoverflow.com/questions/3790379/how-to-query-a-clob-column-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 2 개 날짜 매개 변수를 포함하는 가장 쉬운 사이의 날짜와 임시 테이블을 채우는 방법 및 (0) | 2020.04.15 |
---|---|
[SQL] 어떻게 MySQL의에서 슬래시 (\)를 검색하려면? (\) 이스케이프 왜 요구되는 경우 (=)하지만처럼을 위해 필요하지? (0) | 2020.04.15 |
[SQL] 왜 SQL에는 제품 집계 함수가 없다? (0) | 2020.04.15 |
[SQL] 어떻게 PostgreSQL의 트리거에서 이메일을 보낼 수 있습니까? (0) | 2020.04.15 |
[SQL] 시간 중복에 대한 테이블을 확인? (0) | 2020.04.15 |