SSIS OLE DB Command Transformation (Oracle Connection Manager) failing for columns with NUMERIC(28,10) data type?

61 views Asked by At

I am having a lot of trouble getting a new SSIS package to work. Overall, it takes an Excel spreadsheet of data (headers, a few rows, maybe 15 columns) and should upload that data into an Oracle DB.

Columns in Oracle are roughly: (2) NVARCHR2, (4) NUMBER(38,0), and (9) NUMBER(28,10).

NOTE: I was using Visual Studio 2022, but every time my Excel Connection Manager goes to Validate, the entire application freezes as "busy" until force terminated. Switched to Visual Studio 2019 since I still have it installed on my machine.

Current flow:

Excel Source --> Data Conversion (for Lookup) --> Lookup -->:

  1. Rows with No Match in [Lookup] get directly inserted
  2. Rows with Match in [Lookup] exist and therefore need to be updated, go to OLE DB Command transformation.

I can:

  • Specify my Oracle OleDBConnection manager

  • Set the SqlCommand property like:

    UPDATE TABLEXYZ 
    SET Field1 = ?, Field2 = ?, Field3= ?, Field4 = ? 
    WHERE Field5 = ?
    
  • In [Input and Output Properties] manually add under OLE DB Command Input --> External Columns --> Param_0, Param_1 ... Param_4 and specify data types (this appears to be necessary to do manually when dealing with Oracle as the destination?)

Everything works exactly as expected setting the mapped parameter for my Oracle NVARCHAR2 columns to string [DT_WSTR], and my NUMBER (38, 0) columns to numeric (18, 0).

But as soon as I update my SqlCommand and parameter mappings to include an Oracle NUMBER(28,10) column, the OLE DB Command transformation fails every time. The error from Package execution is seemingly useless but I will include below:

[OLE DB Command [210]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "OraOLEDB" Hresult: 0x80004005 Description: "".

[OLE DB Command [210]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "OraOLEDB" Hresult: 0x80004005 Description: "1". (repeats multiple times)

[SSIS.Pipeline] Error: SSIS Error Code DTS_E_PROCESSINPUTFAILED. The ProcessInput method on component "OLE DB Command" (210) failed with error code 0xC0202009 while processing input "OLE DB Command Input" (215). The identified component returned an error from the ProcessInput method. The error is specific to the component, but the error is fatal and will cause the Data Flow task to stop running. There may be error messages posted before this with more information about the failure.

For the NUMBER(28,10) columns, I have tried setting to Numeric (18, 0) default, Numeric (28, 10), Numeric (38, 10), Decimal, Currency, and a few others.

Can anyone more experienced tell me what I am doing wrong and need datatype to specify my "OLE DB Command" parameters to use for an Oracle DB column of type NUMBER(28,10)?

0

There are 0 answers