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
)