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 parameter
이clob
추출할 수 있습니다.
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
'programing' 카테고리의 다른 글
인라인 스타일 반응 - 스타일 프로포드는 스타일 속성에서 문자열이 아닌 값으로 매핑되어야 합니다. (0) | 2023.03.21 |
---|---|
페이지 분할 내부: 기능하지 않음 (0) | 2023.03.16 |
응용 프로그램/x-www-form-urlencoded를 사용한 POST 요청 (0) | 2023.03.16 |
WordPress 페이지 및 게시물에 PHP 코드 삽입 (0) | 2023.03.16 |
동적 키를 사용하여 개체의 인터페이스를 정의하려면 어떻게 해야 합니까? (0) | 2023.03.16 |