본문 바로가기
Oracle/운영

DBMS_LOB (LOB 관련 정보 추출 패키지)

by 취미툰 2024. 5. 21.
반응형

LOB이라는 데이터 타입이 있고, 크기가 큰 데이터를 저장할 때 사용합니다.

Binary LOB (BLOB)과 Charactor LOB(CLOB) NCLOB 등이 있습니다.

이 데이터타입 관련하여 사용할수있는 오라클 패키지를 정리하도록 하겠습니다.

 

사용하기 위하여는 아래 권한이 필요합니다.

grant execute on SYS.DBMS_LOB to [유저명];

 

사용방법

select DBMS_LOB.[패키지 바디명](lob컬럼) from 테이블;

 

패키지바디를 정리하도록 하겠습니다.

다양하게 있지만 주로 쓰는거같은 것을 정리하도록 하겠습니다.

 

APPEND

두개의 lob의 내용을 합칠 수 있습니다.

 

예제

create table t1 (a int, c clob);
 
insert into t1(a,c) values(1, 'abcde');
1 row inserted.
 
commit;
 
declare
  c1 clob;
  c2 clob;
begin
  c1 := 'abc';
  select c into c2 from t1 where a = 1;
  dbms_output.put_line('c1 before append is ' || c1);
  dbms_output.put_line('c2 before append is ' || c2);
  dbms_lob.append(c1, c2);
  dbms_output.put_line('c1 after append is ' || c1);
  dbms_output.put_line('c2 after append is ' || c2);
  insert into t1 values (2, c1);
end;
 
c1 before append is abc
c2 before append is abcde
c1 after append is abcabcde
c2 after append is abcde
 
PL/SQL procedure successfully completed.
 
select * from t1;
< 1, abcde >
< 2, abcabcde >
2 rows found.

 

CLOSE

이전에 열린 LOB 프로시저를 닫습니다.

 

COMPARE

두개의 LOB을 비교합니다.

사용시 결과로 1(앞의 값이 더 큼),0(두개의 값이 동일),-1(뒤의 값이 더 큼) 3가지 값이 나옵니다.

select dbms_lob.compart(to_char(rawtohex('THIS IS TEST2')),to_char(rawtohex('THIS IS TEST'))) from dual;

-----------
1

1 rows selected.

 

CONVERTTOBLOB, CONVERTTOCLOB

소스를  BLOB,CLOB으로 변환해줍니다.

 

COPY

소스를 복사합니다.

 

CREATETEMPORARY

임시 BLOB,CLOB,NCLOB을 만듭니다.

 

ERASE

LOB전체 또는 일부를 삭제합니다.

 

FREETEMPORARY

CREATETEMPORARY로 만든 임시 LOB을 해제합니다.

 

GETCHUNKSIZE

lob의 chunksize를 반환합니다.

select dbms_lob.getchunksize(a) from lob_test;

---------------------
		8060

 

GETLENGTH

lob의 길이를 반환합니다.

select dbms_lob.getlength(a) from lob_test;

---------------------
351

 

GETOPTION

특정 LOB의 option_type 필드에 해당하는 압축, 중복 제거 및 암호화 설정을 가져옵니다.

 

INSTR

LOB에서 패턴의 n번째 발생의 일치 위치를 사용자가 지정한 오프셋에서 시작하여 반환합니다.

a컬럼에서 TITLE

select dbms_lob.instr(a,'TITLE') from lob_test;

---------------------
14

 

ISOPEN

LOB이 열려있는지 확인합니다. 1이면 OPEN 아니면 0입니다.

select dbms_lob.isopen(a) from lob_test;

---------------------
0

 

ISREMOTE

LOB이 데이터베이스의 로컬인지 또는 원격 데이터베이스에 속하는지 확인합니다. TRUE면 remote, FALSE면 로컬입니다.

 

ISSECUREFILE

LOB이 SecureFile LOB용이면 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다.

 

ISTEMPORARY

LOB이 임시인지 아닌지 확인합니다. 0이면 임시가 아니고 1이면 임시입니다.

 

 LOADBLOBFROMFILE

이 프로시저는 BFILE에서 내부 BLOB로 데이터를 로드합니다. 그러면 LOADFROMFILE과 동일한 결과를 얻을 수 있으며, 새로운 오프셋을 반환합니다.

 

 LOADCLOBFROMFILE

BFILE에서 필요한 문자 집합 변환과 함께 내부 CLOB/NCLOB로 데이터를 로드하고 새 오프셋을 반환합니다.

 

LOADFROMFILE

(deprecated)소스 외부 LOB(BFILE)의 전부 또는 일부를 대상 내부 LOB에 복사합니다.

 

MOVE_TO_DBFS_LINK

이 절차는 지정된 LOB 데이터(데이터베이스에서)를 DBFS HSM Store에 보관합니다.

 

OPEN

indicated mode에서 내부 또는 외부의 LOB를 엽니다

 

READ 

LOB 조각을 읽고 LOB 시작부터 절대 오프셋에서 시작하여 지정된 양을 버퍼 파라미터로 반환합니다.

 

SET_DBFS_LINK

지정한 SecureFile을 지정한 경로 이름에 연결합니다. 데이터를 경로에 복사하지 않습니다.

 

SETCONTENTTYPE

LOB의 데이터에 대한 내용 유형 문자열을 설정합니다.

 

SETOPTIONS

LOB 단위로 압축 및 중복 제거를 활성화/비활성화하여 기본 LOB 열 설정을 재정의합니다.

 

SUBSTR 

LOB의 처음부터 절대 오프셋에서 시작하여 LOB의 양 바이트 또는 문자를 반환합니다.

 

TRIM 

내부 LOB 값을 newlen 파라미터에서 지정한 길이로 트리밍합니다.

 

WRITE 

LOB의 시작부터 절대 오프셋에서 시작하여 지정된 양의 데이터를 내부 LOB에 기록합니다. 데이터는 버퍼 파라미터에서 기록됩니다.

 

WRITEAPPEND 

이 절차는 지정된 양의 데이터를 내부 LOB의 끝에 기록합니다. 데이터는 버퍼 파라미터로부터 기록됩니다

 

 

출처 : https://docs.oracle.com/database/timesten-18.1/TTPLP/d_lob.htm#TTPLP66709

 

DBMS_LOB

This procedure copies all or part of a source LOB to a destination LOB. You can specify the offsets for both the source and destination LOBs, and the number of bytes or characters to copy. Examples The examples in this section show how to copy LOBs in PL/S

docs.oracle.com

 

https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_LOB.html#GUID-5007AA22-A628-4F44-B173-6B27F8C68A83

 

PL/SQL Packages and Types Reference

The DBMS_LOB package provides subprograms to operate on BLOBs, CLOBs, NCLOBs, BFILEs, and temporary LOBs. You can use DBMS_LOB to access and manipulate specific parts of a LOB or complete LOBs.

docs.oracle.com

 

 

 

 

 

반응형

댓글