programing

Oracle에서 CLOB 열을 쿼리하는 방법

yellowcard 2023. 3. 16. 21:18
반응형

Oracle에서 CLOB 열을 쿼리하는 방법

CLOB 데이터 유형인 열이 몇 개 있는 쿼리를 실행하려고 합니다.쿼리를 정상적으로 실행하면 모든 필드에(CLOB)그 가치로.

나는 그것을 사용해봤어요.DBMS_LOB.substr(column에러가 표시됩니다.

ORA-06502: PL/SQL: numeric or value error: character string buffer too small

CLOB 컬럼을 조회하려면 어떻게 해야 하나요?

이것은 동작합니다.

select DBMS_LOB.substr(myColumn, 3000) from myTable

CLOB 열의 서브스트링을 가져와 크기/버퍼 제한이 있는 쿼리 도구를 사용할 경우 BUFFER를 더 큰 크기로 설정해야 할 수 있습니다.예를 들어 SQL Plus를 사용하는 동안SET BUFFER 10000디폴트는 4000으로 10000으로 설정합니다.

의 실행DBMS_LOB.substr명령어는 반환할 문자 수 및 반환되는 오프셋도 지정할 수 있습니다.그래서 사용하다DBMS_LOB.substr(column, 3000)버퍼에 사용할 수 있는 소량으로 제한될 수 있습니다.

subst 명령어에 대한 자세한 내용은 oracle 문서를 참조하십시오.


DBMS_LOB.기판(CLOB 문자 집합의 lob_loc, ANY_CS,INTEGER : = 32767,오프셋 IN 정수 : = 1)VARCHAR2 문자 집합 lob_loc%C 반환가혹한

Oracle 데이터베이스에 있는 Huge Clob에서 다른 문제가 발생했습니다.dbms_lob.substr함수에 4000의 값만 허용했습니다.예:

dbms_lob.substr(column,4000,1)

그래서 더 큰 휴클롭을 위해, 저는 두 개의 전화를 사용해서select:

select dbms_lob.substr(column,4000,1) part1, 
       dbms_lob.substr(column,4000,4001) part2 from .....

자바 앱에서 전화를 걸었기 때문에 part1과 part2를 연결하여 메일로 보냈습니다.

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;

clob 열에서 검색

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

큰 CLOB의 경우 다음 선택도 사용할 수 있습니다.

SELECT dbms_lob.substr( column_name, dbms_lob.getlength(column_name), 1) FROM foo

다른 옵션은 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);

정답을 더하다.

declare
v_result clob;
begin
---- some operation on v_result
dbms_lob.substr( v_result, 4000 ,length(v_result) - 3999 );

end;
/

dbms_lob.substr

first parameterclob추출할 수 있습니다.

Second parameter추출할 클럽의 길이입니다.

Third parameter는 추출할 단어입니다.

위의 예에서 나는 나의 clob 사이즈가 50000 이상이라는 것을 알고 있습니다.그래서 나는 마지막 4000자를 원합니다.

SQL*Plus를 사용하는 경우 다음을 시도해 보십시오.

set long 8000

select ...

언급URL : https://stackoverflow.com/questions/3790379/how-to-query-a-clob-column-in-oracle

반응형