. net 데이터베이스에서 이진 데이터를 가져와 rtf 파일로 변환하는 방법
예:
Oracle 시리즈: LOB 대형 객체 처리
는 주로 대용량 데이터를 저장하는 데이터베이스 필드이며 최대 4G 바이트의 구조화되지 않은 데이터를 저장할 수 있습니다.
는 문자 유형 및 이진 파일 유형 LOB 데이터의 저장소를 주로 소개하고 이진 유형 LOB 데이터의 저장소를 별도로 설명합니다.
1, Oracle 의 LOB 데이터 유형 분류
1, 저장된 데이터 유형별로 구분:
① 문자 유형:
CLOB: 많은 수의 1 바이트 문자 데이터를 저장합니다.
NLOB: 고정 너비 멀티바이트 문자 데이터를 저장합니다.
② 이진 유형:
BLOB: 큰 구조화되지 않은 이진 데이터를 저장합니다.
③ 이진 파일 유형:
BFILE: 데이터베이스 외부의 운영 체제 파일에 이진 파일을 저장합니다. 보관 파일 경로입니다.
2, 저장 방식별 분할:
① 내부 테이블스페이스에 저장:
CLOB, NLOB 및 BLOB
② 외부 운영 체제 파일:
BFILE
2, 큰 객체
create tablespace ts5 _ 21
datafile' e: \ Oracle \ ts5 _ 21.dbf'
size 5m;
*/
create tabletlob (
no number (4),
name varchar2 (1),
resume Photo) storeas (
tablespace ts5 _ 21-저장된 테이블스페이스 지정
chunk 6k-블록 크기 지정
disable storage in row)
2, 큰 객체 열 삽입
① 먼저 일반 열 데이터 삽입
② 큰 객체 열이 나타나면 빈 생성자를 삽입합니다.
문자: empty_clob (), empty_nclob()
이진: empty_blob()
이진 파일 유형:;
BFileName 함수:
bfilename ('논리 디렉토리 이름',' 파일 이름'); 데이터 사전은 대문자로 저장되므로
논리 디렉토리 이름은 대문자로만 저장할 수 있습니다. Oracle 은 대소문자를 구분합니다.
만들 때 BFileName 함수 논리 디렉토리를 물리적 경로로 가리키지 않아도 됩니다.
예:
insert into tlob values (1,' gene', empty _ clob (), empty _ blob (), bfill
③ 논리 카탈로그를 물리적 카탈로그와 연결한다. (바이너리 파일 유형인 경우)
CREATE ANY DIRECTORY 권한 부여
Grant CREATE ANY DIRECTORY TO 사용자 이름 WITH ADMIN OPTION;;
논리 및 물리적 디렉토리 연결
로컬
Create Directory 논리 디렉토리 이름 as' 파일의 물리적 디렉토리';
네트워크:
Create Directory 논리 디렉토리 이름 As ‘\\ \ 호스트 이름 (IP)\*** 공유 디렉토리';
예:
directory mydir as' e: \ Oracle';
삽입 예:
insert into tlob values (1,' gene',' clob 큰 객체 열', empty _ blob (), bfilename
3, 큰 객체 데이터 읽기 및 작업: DBMS_LOB 패키지
DBMS_LOB 패키지: 큰 객체 처리 절차 및 함수 포함
/*
insert into tlob values
insert into tlob values (2,' jack',' clob 큰 객체 열', empty _ blob (), bfilename ('mydir')
insert into tlob values(3,'Mary',' 큰 객체 열 clob', empty _ blob (), bfilename ('mydir')
*/
1, 큰 객체 데이터를 읽는 프로세스와 함수
p>①:DBMS_LOB.Read (): LOB 데이터에서 지정된 길이 데이터를 버퍼로 읽는 프로세스입니다.
DBMS_LOB.Read(LOB 데이터, 지정된 길이, 시작 위치, 저장 반환 LOB 유형 값 변수);
예:
Declare
varC clob;
vRStr varchar2(1) :
ln 번호 (4);
Strt number(4);
begin
select resume into varc from tlob where no = 1;
ln := DBMS_LOB.GetLength(varC);
Strt := 1;
DBMS _ lob.read (varc, ln, strt, vrstr);
DBMS _ output.put _ line ('return:' | | vrstr);
End;
②: DBMS _ LOB.substr (): lob 데이터에서 하위 문자열을 추출하는 함수입니다.
DBMS_LOB.SubStr(LOB 데이터, 추출 길이 지정, 추출 시작 위치 지정):
예:
Declare
varC clob;
vRStr varchar2(1) :
ln 번호 (4);
Strt number(4);
begin
select resume into varc from tlob where no = 1;
ln := 4;
Strt := 1;
vrstr: = DBMS _ lob.substr (varc, ln, strt);
DBMS_output.put_line ('결과:' ||vRStr);
End;
③: DBMS _ LOB.instr (): lob 데이터에서 하위 문자열 위치를 찾는 함수입니다.
DBMS_LOB.InStr(LOB 데이터, 하위 문자열);
예:
Declare
varC clob;
vSubStr varchar2(1) :
vRStr varchar2(1) :
ln 번호 (4);
begin
select resume into varc from tlob where no = 1;
vSubStr :=' 큰 객체';
ln: = DBMS _ lob.instr (varc, vsubstr);
DBMS_output.put_line ('위치:' ||ln);
vrstr: = DBMS _ lob.substr (varc, length (vsubstr), ln);
DBMS_output.put_line ('위치' ||ln||' 길이가' ||Length(vSubStr)||' 인 하위 문자열은 다음과 같습니다
End;
④: DBMS _ LOB.getlength (): 지정된 lob 데이터의 길이를 반환하는 함수입니다.
DBMS_LOB.GetLength(LOB 데이터) :
⑤: DBMS _ lob.compare (): 두 개의 큰 객체가 같은지 비교합니다. 반환 값 은 동일하고 -1 은 같지 않습니다.
DBMS_LOB.Compare(LOB 데이터, LOB 데이터);
예:
Declare
varC1 clob;
varC2 clob;
varC3 clob;
ln 번호 (4);
begin
select resume into var C1 from tlob where no = 1;
select resume into var C2 from tlob where no = 2;
select resume into var C3 from tlob where no = 3;
ln: = DBMS _ lob.compare (varc1, varc1);
DBMS_output.put_line ('비교 결과:' ||ln);
ln: = DBMS _ lob.compare (varc2, varc3);
DBMS_output.put_line ('비교 결과:' ||ln);
End;
2, 큰 객체 데이터를 조작하는 과정 < P > 작업은 데이터베이스의 기존 데이터를 변경하며, Updata 잠금을 추가하여 지정된 데이터 열을 잠그고 수정한 후 트랜잭션을 커밋해야 합니다.
p>①:DBMS_LOB.Write (): 지정된 수의 데이터를 LOB 에 기록하는 프로세스입니다.
DBMS_LOB.Write (LOB 쓰기, 쓰기 길이 (LOB 데이터 쓰기 참조), 쓰기 시작 위치 (LOB 쓰기 참조), LOB 데이터 쓰기);
예:
Declare
varC clob;
vWStr varchar2(1) :
vStrt number(4) :
ln 번호 (4);
Begin
vWStr := 'CLOB';
ln: = 길이 (vwstr);
vStrt := 5;
select resume into varc from tlob where no = 1 for update;
DBMS _ lob.write (varc, ln, vstrt, vwstr);
DBMS_output.put_line ('덮어쓰기 결과:' ||varC);
Commit;
End;
②: DBMS _ LOB.append (): 지정된 LOB 데이터를 지정된 lob 데이터에 추가한 후의 프로세스입니다.
DBMS_LOB.Append(LOB 데이터, LOB 데이터);
예:
Declare
varC clob;
vAStr varchar2(1) :
Begin
vAStr :=', 큰 객체 열';
select resume into varc from tlob where no = 1 for update;
DBMS_LOB.Append(varC, vAStr) :
commit;
DBMS_output.put_line ('추가 결과:' ||varC);
End;
③: DBMS _ LOB.erase (): lob 데이터에서 지정된 위치의 일부 데이터를 제거하는 프로세스입니다.
DBMS _ lob.erase (삭제 길이를 지정하는 lob 데이터, 삭제 시작 위치);
예:
Declare
varC clob;
ln 번호 (4);
strt number(4);
Begin
ln := 1;
strt := 5;
select resume into varc from tlob where no = 1 for update;
DBMS_LOB.Erase(varC, ln, strt);
commit;
DBMS_output.put_line ('삭제 결과:' ||varC);
End;
④: DBMS _ LOB.trim (): 첫 번째 lob 데이터에서 lob 데이터를 자릅니다