Consultor Eletrônico



Kbase P37956: Records containing null values do not insert correctly into Oracle using bulk insert feature
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   12/09/2008
Status: Verified

SYMPTOM(s):

Records do not insert correctly into Oracle

Records are inserted using bulk insert

Records that don not insert correctly contain ? (unknown) values

Records containing null values are inserted as not containing null values

Records not containing null values are inserted as containing null values

Records are read from Progress database then bulk inserted into Oracle database

Simplied code used to perform bulk insert
DEFINE VARIABLE v_handle AS INTEGER NO-UNDO.

RUN STORED-PROC SEND-SQL-STATEMENT
v_handle = PROC-HANDLE ("--Bulk-insert Start").
CLOSE STORED-PROC SEND-SQL-STATEMENT WHERE PROC-HANDLE = v_handle.

FOR each progress_table no-lock:

create oracle_table.
assign oracle_table.field1 = progress_table.field1
oracle_table.field2 = progress_table.field2.
END.

RELEASE progress_table. /* Flush out the last one before --Bulk-insert End */
RUN STORED-PROC SEND-SQL-STATEMENT
v_handle = PROC-HANDLE ("--Bulk-insert End").
CLOSE STORED-PROC SEND-SQL-STATEMENT WHERE PROC-HANDLE = v_handle.


Using bulk insert from dictionary menu produces the same result

Regular insert works correctly

FACT(s) (Environment):

Progress 9.1C
Progress 9.1D
Oracle DataServer

CAUSE:

This is a known issue being investigated by Development

FIX:

Use regular insert or modify the code checking null values of records read from progress database, modify the records to not contain null values, then bulk insert into Oracle
For example,
DEFINE VARIABLE v_handle AS INTEGER NO-UNDO.

RUN STORED-PROC SEND-SQL-STATEMENT
v_handle = PROC-HANDLE ("--Bulk-insert Start").
CLOSE STORED-PROC SEND-SQL-STATEMENT WHERE PROC-HANDLE = v_handle.

FOR each progress_table no-lock:

create oracle_table.
assign oracle_table.field2 = IF progress_table.field2 = ? then "" ELSE
progress_table.field2.
END.

RELEASE progress_table. /* Flush out the last one before --Bulk-insert End */
RUN STORED-PROC SEND-SQL-STATEMENT
v_handle = PROC-HANDLE ("--Bulk-insert End").
CLOSE STORED-PROC SEND-SQL-STATEMENT WHERE PROC-HANDLE = v_handle.