현재 ODAC를 사용하며 DB는 오라클 DB를 사용중입니다.
지금 BLOB 필드에 실행파일이라던지 엑셀,워드등의 문서 파일들을 집어넣어야 하는데
도무지 해결이 되질 않습니다.
이미지를 집어넣는 부분은 잘 처리됩니다만 일반 파일들은 올라가지 않는군요.
테스트로 넣어본것중 ini 파일 하나는 올라가던데 그 파일 용량은 41byte...
정확히는 모르겠지만 1024BYTE 이상은 올라가지 않도록 되 있는것 같습니다만...
현재 구조는 메인폼에 OraSession 하나를 두고 거기에 쿼리를 연결해서 사용하고 있습니다.
DB에 기존 데이터들은 다 입력되 있는 상태에서 BLOB 데이터만 추가하면됩니다.
<!--CodeS-->
with qryMain do
begin
SQL.Text := 'UPDATE TBL_DOCUMENTS ' +
'SET ATTACHFILE = EMPTY_BLOB() ' +
'WHERE ATTACHNO = :ATTACHNO ' +
'RETURNING ATTACHFILE ' +
'INTO :ATTACHFILE ';
try
Close;
ParamByName('ATTACHNO').AsString := 'A200808280001';
ParamByName('ATTACHFILE').ParamType := ptInput;
ParamByName('ATTACHFILE').Size := 1024000;
ParamByName('ATTACHFILE').AsBLOBLocator.LoadFromFile(sFileName);
ExecSQL;
except;
OraSession1.RollBack;
exit;
end;
OraSession1.Commit;
end;
<!--CodeE-->
ODAC HELP에 있는 내용을 바탕으로 만들면 이렇습니다만 안 들어가집니다.
ORA-00600, ORA-06502, ORA-06512 에러를 한번에 뱉어내면서..
그래서 Stream 으로 집어넣어봤습니다.
<!--CodeS-->
with qryMain do
begin
SQL.Text := 'UPDATE TBL_DOCUMENTS ' +
'SET ATTACHFILE = EMPTY_BLOB() ' +
'WHERE ATTACHNO = :ATTACHNO ' +
'RETURNING ATTACHFILE ' +
'INTO :ATTACHFILE ';
Close;
fsFile := TFileStream.Create(sFileName, fmOpenRead or fmShareDenyRead);
try
fsFile.Seek(0, soFromBeginning);
msFile := TMemoryStream.Create;
try
msFile.CopyFrom(fsFile, fsFile.Size);
ParamByName('ATTACHNO').AsString := 'A200808280001';
ParamByName('ATTACHFILE').ParamType := ptInput;
ParamByName('ATTACHFILE').Size := 1024000;
ParamByName('ATTACHFILE').AsOraBlob.LoadFromStream(msFile);
ExecSQL;
finally
msFile.Free;
end;
finally
fsFile.Free;
end;
OraSession1.Commit;
end;
<!--CodeE-->
Code는 게시판에 직접 친거라 조금 다를수도 있지만
이런식으로도 만들어봤으나 마찬가지 결과가 나옵니다.
Blob 스트림을 만들어봐도 안되고...
이미지는 잘 들어가는데 다른 파일들만 이런 문제가 생기니 원...
FTP로 처리할려니 추후 DB 백업하고 재설치할때라던지
그런때 이중으로 작업이 들어가게 되니 하기가 좀 그렇군요.
(급한대로 FTP로 하라고는 하는데 이전 개발자가 그런 정신으로 해놔서 이 따위로 개판 쳐둔걸 따라할 수는 없죠...)
모든 DB는 오라클을 사용하면서 정작 오라클 아는 직원은 한사람도 없으니 물어볼 수도 없고...
(나보고 어쩌라고... 나도 처음인데...ㅡ_ㅡ)
혹시 처리해 보신분 계시면 조언 좀 부탁드립니다.
잡설. 이번 달에도 월급 안주면 나가버릴테다...