Q&A

  • Ora-01460 요구된 변환은 실행될 수 없습니다
<!--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까지 수용가능 하니까)

어디가 문제인지 알수가 없네요.. 고수님들의 고견 부탁드립니다.


2  COMMENTS
  • Profile
    박종만 2006.07.20 04:08
    stored procedure의 파라미터 타입에 대한 문제로 보입니다.
    아마도 stored procedure에서 body가 varchar2로 지정이 되어 있고 그 값을 long 컬럼에 넣는 것으로 보입니다.
    pl/sql에서 varchar2의 최대 크기는 32,767 byte 까지입니다.
  • Profile
    김경운 2006.07.20 05:41
    제가 만든 SP도입부입니다.
    <!--CodeS-->
    CREATE OR REPLACE PROCEDURE UPD_HEADER
    (
      piHEADER_ID        VARCHAR2,
      piBODY                LONG,  <= 현재 이 부분이 문제임.
      piCHK_CON        CHAR ,
      piFORMID        CHAR ,
      poNUM                OUT CHAR,
      poCON                OUT VARCHAR2
    )
    <!--CodeE-->
    SP쪽에도 LONG 타입으로 지정을 해 놓았고, 테이블 상에도 데이터타입을 LONG형으로 해 놓았습니다.
    그래도 발생되는 에러 입니다.