javaはPL/SQLを呼び出してblobデータを読み書きます。

1736 ワード

最近のプロジェクトで必要なのは、毎日のデータ量をxmlと書いて、データベースに圧縮して保存する必要があります。呼び出しごとに順次符号化して圧縮しないようにします。もちろん、pl/sqlを思い付いて一部の業務の操作を完成します。

  
create table TEST
(
  KEY       DATE,
  DATAVALUE BLOB
)

create or replace procedure INSERT_BLOB(KEYDATA  in VARCHAR2,
                                        BLOBDATA in TEST.Datavalue%TYPE) is
  v_lobd TEST.DATAVALUE%TYPE;
  v_key   TEST.Key%TYPE;
  v_count integer;
begin
  v_key := to_date(KEYDATA, 'yyyy-mm-dd');
  select count(*) into v_count from TEST t where t.key = v_key;
  if v_count != 0 then
    delete from TEST t where t.key = v_key;
  end if;
  insert into TEST (key,datavalue)  VALUES(v_key, empty_blob()) returning datavalue into v_lobd;
  dbms_lob.open(v_lobd,Dbms_Lob.lob_readwrite);
  dbms_lob.writeappend(v_lobd,utl_raw.length(BLOBDATA),BLOBDATA);
  dbms_lob.close(v_lobd);
  commit;
EXCEPTION
  when others then
    begin
      rollback;
    end;
end INSERT_BLOB;



create or replace procedure READ_BLOB(STARTDATE in VARCHAR2,
                                      ENDDATE   in VARCHAR2,
                                      BLOBDATA  out SEARCHDEMOPACKAGE.ResultCursor) is

v_startdate TEST.Key%TYPE;
v_enddate TEST.Key%TYPE;
begin
v_startdate :=to_date(STARTDATE,'yyyy-mm-dd');
v_enddate :=to_date(ENDDATE,'yyyy-mm-dd');
open BLOBDATA for select t.datavalue from TEST t where  t.key>=v_startdate and t.key<=v_enddate;
end READ_BLOB;