티스토리 뷰
LOB (Large OBject)
- LOB는 TEXT, 그래픽, 이미지, 비디오, 사운드 등 구조화되지 않은 대형 데이터를 저장하는데 사용한다.
- 크기가 큰 데이터는 DB에 저장하기 힘들기 때문에 OS상 존재하는 파일을 데이터베이스가 접근하게 된다.
- LONG, LONG RAW 데이터 유형은 예전에 사용하던 것이고, 현재는 대부분 LOB 데이터 유형을 사용한다.
LOB의 종류
- CLOB : 문자 대형 객체(Character) Oracle Server는 CLOB와 VARCHAR2 사이에 암시적 변환을 수행한다.
- BLOB : 이진 대형 객체(Binary) 이미지, 동영상, MP3 등
- BFILE : OS에 저장되는 이진 파일의 이름과 위치가 저장된다. 읽기전용 모드로만 액세스 가능하다.
- NCLOB : 내셔널 문자 대형 객체(National) 오라클에서 정의되는 National Character Set을 따르는 문자이다.
데이터베이스의 내부/외부 저장위치
- CLOB, BLOB, NCLOB 은 내부 : Table에 LOB형식의 컬럼을 생성하고 이곳에 데이터의 실제 위치를 가리키는 Locator(위치자)를 저장한다.
- BFILE 은 외부에 저장한다.
LOB 구성
- LOB 값 : 저장될 실제 객체를 구성하는 데이터
- LOB 위치자 : 데이터베이스에 저장된 LOB값의 위치에 대한 포인터
- LOB열에는 데이터가 없고 LOB 위치자만 들어있다.
Oracle에서 CLOB 조회(쿼리)하는 방법
# CLOB컬럼의 전체길이 반환
DBMS_LOB.GETLENGTH(CLOB컬럼명)
# CLOB컬럼의 값 조회
DBMS_LOB.SUBSTR(CLOB컬럼명, 가져올 길이, 오프셋)
[ORA-06502, ORA-06512 오류 발생 시 조치 방법]
지정된 Buffer 크기보다 더 큰 데이터를 읽을 때 발생한다.
SUBSTR함수의 Offset를 이용하여 여러 번 호출하여 해결 가능하다.
오라클 myBatis.oracle.sql.CLOB@ 에러
게시글을 가져오는 상황이었으며 데이터타입은 CLOB타입이었다.
/*
# CLOB 형 데이타 SELECT
DBMS_LOB.SUBSTR(
CLOB 타입 컬럼 명
, 추출할 문자열 길이(숫자) OR 전체 문자길이( DBMS_LOB.GETLENGTH(CONTENTS) )
, 전체 값 출력 : 1
)
전체 문자길이( DBMS_LOB.GETLENGTH(CONTENTS) ) 사용시 아래와 같은 메세지 발생할 수 있음.
-- ORA-06502: PL/SQL: 수치 또는 값 오류: 문자열 버퍼가 너무 작습니다
==> DBMS_LOB.GETLENGTH(CONTENTS)의 길이가 4000이상인 경우 발생하는 듯함. 원인은 아래 내용 참조
*/
CLOB일 경우, Byte가 아니라 문자 갯수가 4000자로 잘려진다고 한다.
즉, 문자셋이 한글이나 UTF-8 등으로 되어 있을 경우, 4000자를 가져오면 4000 Byte를 넘기 때문에,
VARCHAR2 에 저장할 수 있는 한계에 걸려, 해당 오류가 발생한다.
또한, DBMS_LOB.SUBSTR(...) 함수의 리턴 값이 VARCHAR2로 지정되어 있어서,
이 함수를 SQL 문장에서 직접 사용할 경우, 함수가 리턴될 때 바로 4000Byte 제한이 걸리게 된다.
'ALL' 카테고리의 다른 글
API 란? (0) | 2023.01.02 |
---|---|
2022 회고록 (0) | 2023.01.01 |
[React] useState 간단예제 카운터 (0) | 2022.12.29 |
modal 열기, 닫기, 닫기 이벤트처리 및 해제 (0) | 2022.12.13 |
선언형 코드/ 명령형 코드 (0) | 2022.09.11 |
- Total
- Today
- Yesterday
- 시큐리티
- React
- 인덱스
- 데브캠프
- 코드로 배우는 스프링 웹 프로젝트
- @Configuration
- security
- 이정환
- 스프링 빈
- MySQL
- 컨테이너
- 데이터베이스
- di
- Spark
- AWS
- 스프링의정석
- 친절한SQL튜닝
- JavaScript
- spring
- Node.js
- 남궁성
- 자바의정석
- 자바스크립트
- 리액트
- 한입크기로 잘라먹는 리액트
- 객체지향
- EC2
- node
- 스프링
- 스프링 프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |