<!--CodeS-->
procedure frm1.InsTxt;
var
sfilename : string;
begin
sfilename := '//98.0.23.54/migration'+ bWd + '_0_body.html';
if FileExists(sfilename) then
begin
aWd := 'file://98.0.23.54/migration'+ bWd + '_0_body.html';
sForm := 'ht'
end
else
begin
aWd := 'file://98.0.23.54/migration'+ bWd ;
sForm := 'tx'
end;
WebBrowser1.Navigate(aWd);
while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;
try
if sForm = 'ht' then
begin
Memo2.text := WebBrowser1.OleObject.Document.DocumentElement.OuterHTML;
end
else
begin
Memo2.text := WebBrowser1.OleObject.document.all.body.value ;
end;
except
Memo2.text = '';
end;
end;
<!--CodeE-->
이렇게 body부분의 txt부분만 입력하는 것과, html 전체를 입력하는 부분으로 나누어 DB(LONG형)에
저장해야 될 일이 있어서 아래와 같이 코딩
<!--CodeS-->
with LT_DB1.StoredProc1 do
begin
try
if Memo2.text <> '' then
begin
StoredProcName := 'UPD_HEADER';
Params.Clear;
Label2.Caption := bWd;
Params.CreateParam(ftString, 'piHEADER_ID', ptInput).AsString := Header_id;
Params.CreateParam(ftMemo , 'piBODY', ptInput).AsMemo := Memo2.Text; <= DB의 이 부부은 LONG형
Params.CreateParam(ftString, 'piCHK_CON', ptInput).AsString := sTmp;
Params.CreateParam(ftString, 'piFORMID', ptInput).AsString := sForm;
Params.CreateParam(ftInteger, 'poNUM', ptOutput).AsInteger;
Params.CreateParam(ftString, 'poCON', ptOutput).AsString;
if not Prepared then Prepare; ExecProc; UnPrepare; <= 여기서 Ora-01460 에러 발생
iMsg := ParamByName('poNUM').Asinteger;
sMsg := ParamByName('poCON').AsString
end
else
except
end;
end;
<!--CodeE-->
처리하였습니다.
문제는 33,000byte 까지는 들어가는 것을 확인했는데, 40,000 byte 정도 되는 자료를 넣으려고 하니
'Ora-01460 요구된 변환은 실행될 수 없습니다' 라는 에러가 뜹니다.
TOAD에서 40,000byte 자료를 직접 입력시키면 당근 들어갑니다
(long타입이 2Gbyte까지 수용가능 하니까)
어디가 문제인지 알수가 없네요.. 고수님들의 고견 부탁드립니다.
아마도 stored procedure에서 body가 varchar2로 지정이 되어 있고 그 값을 long 컬럼에 넣는 것으로 보입니다.
pl/sql에서 varchar2의 최대 크기는 32,767 byte 까지입니다.