Hugh.Jones
Member²
Hi all.
Seem to have hit a snag and I am really stuck ....
I am porting from Interbase to Oracle using the direct path loader. Some, though not all, tables with blobs fail with ORA-01009. I have tried all sorts of combinations of buffer size and extra .DataSize to no avail. In my sample code below I double up for good measure.
My Code Excepts on the Last Line (.Prepare()) of the following
	
	
	
		
My Logs Show :
[May 29 12:08:16:936] ----------------------------------------------------------------
[May 29 12:08:21:733] Creating UPS_UPLOAD_RESPONSES
[May 29 12:08:22:811] UPS_UPLOAD_RESPONSES.FILEDATA is a Blob of Type 1
[May 29 12:08:22:936] Loading UPS_UPLOAD_RESPONSES
[May 29 12:08:23:233] DataSize = 20412
[May 29 12:08:23:248] Max(BlobSize) = 10206
[May 29 12:08:33:983] Server Error : ORA-01009: missing mandatory parameter
------------------------------
Oracle Table is
 
CREATE TABLE UPS_UPLOAD_RESPONSES
(
UPLOADID NUMBER(15),
INSERTTIME DATE,
INSERTDAY DATE,
PICKUPNO NUMBER(15),
ERRCODE NUMBER(10),
FILEDATA CLOB,
FNAME VARCHAR2(200 BYTE)
)
Interbase Table is :
 
CREATE TABLE UPS_UPLOAD_RESPONSES (
UPLOADID DOUBLE PRECISION NOT NULL,
INSERTTIME TIMESTAMP NOT NULL,
INSERTDAY TIMESTAMP NOT NULL,
PICKUPNO DOUBLE PRECISION,
ERRCODE INTEGER,
FILEDATA BLOB SUB_TYPE 1 SEGMENT SIZE 50,
FNAME VARCHAR(200) NOT NULL
)
 
				
			Seem to have hit a snag and I am really stuck ....
I am porting from Interbase to Oracle using the direct path loader. Some, though not all, tables with blobs fail with ORA-01009. I have tried all sorts of combinations of buffer size and extra .DataSize to no avail. In my sample code below I double up for good measure.
My Code Excepts on the Last Line (.Prepare()) of the following
		Code:
	
	// MAX_BUF_SIZE       = 8192000;
var
  i : integer;
begin
  // Initialise the Loader
  FOraPathLoader             := TOracleDirectPathLoader.Create(Self);
  FOraPathLoader.DateFormat  := ORACLE_DATE_FORMAT;
  FOraPathLoader.BufferSize  := MAX_BUF_SIZE;
  FOraPathLoader.Session     := FOraSession;
  FOraPathLoader.TableName   := ToOraName(AIBTable.TableName);
  FOraPathLoader.GetDefaultColumns(FALSE);
  for i := 0 to AIBTable.Fields.Count - 1 do begin
    if AIBTable.Fields[i].DataType in [ftVarBytes, ftBlob, ftMemo, ftGraphic, ftFmtMemo] then begin
      FIBBlobLenQuery.Sql.Text := Format(BLOB_LEN_SQL,[AIBTable.Fields[i].FieldName, AIBTable.TableName]);
      try // Calculate the largest blob size
        FIBBlobLenQuery.Open;
        FOraPathLoader.Columns[i].DataSize := FIBBlobLenQuery.Fields[0].AsInteger * 2;
        if Assigned(OnMessage) then begin
          OnMessage(self, Format('DataSize = %d',[FOraPathLoader.Columns[i].DataSize]));
          OnMessage(self, Format('Max(BlobSize) = %d',[FIBBlobLenQuery.Fields[0].AsInteger]));
        end;
      finally
        FIBBlobLenQuery.Close;
      end;
    end;
  end;
  FOraPathLoader.Prepare;
end;
	[May 29 12:08:16:936] ----------------------------------------------------------------
[May 29 12:08:21:733] Creating UPS_UPLOAD_RESPONSES
[May 29 12:08:22:811] UPS_UPLOAD_RESPONSES.FILEDATA is a Blob of Type 1
[May 29 12:08:22:936] Loading UPS_UPLOAD_RESPONSES
[May 29 12:08:23:233] DataSize = 20412
[May 29 12:08:23:248] Max(BlobSize) = 10206
[May 29 12:08:33:983] Server Error : ORA-01009: missing mandatory parameter
------------------------------
Oracle Table is
CREATE TABLE UPS_UPLOAD_RESPONSES
(
UPLOADID NUMBER(15),
INSERTTIME DATE,
INSERTDAY DATE,
PICKUPNO NUMBER(15),
ERRCODE NUMBER(10),
FILEDATA CLOB,
FNAME VARCHAR2(200 BYTE)
)
Interbase Table is :
CREATE TABLE UPS_UPLOAD_RESPONSES (
UPLOADID DOUBLE PRECISION NOT NULL,
INSERTTIME TIMESTAMP NOT NULL,
INSERTDAY TIMESTAMP NOT NULL,
PICKUPNO DOUBLE PRECISION,
ERRCODE INTEGER,
FILEDATA BLOB SUB_TYPE 1 SEGMENT SIZE 50,
FNAME VARCHAR(200) NOT NULL
)