Skip to Main Content

Analytics Software

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

How to capture Field validation errors in the Error table in ODI 11g

885311Jul 12 2012 — edited Aug 22 2013
Hello,

We are using ODI 11g (11.1.1.5) and the scenario is to read the data from a flat file (.txt) and do a bulk insert into MS SQL Server database table.

We need to capture the error records (if the source field size is greater than the target column size) into the error table. However the interface errors out at step "Loading - SrcSet0 - Load data (BULK INSERT)" with error message "SQLServer JDBC Driver][SQLServer]Bulk load data conversion error (truncation) for row 33, column 6" but these errors are not being inserted into the error table.

Is there a way to capture these errors in the error table? Below is the KM details.

LKM: LKM File to MSSQL (BULK)
CKM: CKM SQL
IKM: IKM MSSQL Incremental Update

FLOW_CONTROL is set to true for the IKM.

Thanks,
Krishna

Comments

Frank Kulash

Hi,

Whenever you have a question, please post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) for all the tables involved, and the exact results you want from that data, so that the people who want to help you can re-create the problem and test their ideas.

Explain, using specific examples, how you get those results from that data.

Always say what version of Oracle you're using (e.g. 11.2.0.2.0).

See the forum FAQ:

Use the analytic ROW_NUMBER function to assign numbers 1, 2, 3, ... to each row, with a separate series for each worker and date.  Each distinct combination of worker and assigned number will result in a row of output.

CarlosDLG

You will usually get quicker and more accurate answers if you post create table statements and inserts with some sample data, along with an explanation of the specific problem you are facing.

Here is one way to do it:

WITH test_data as

(

SELECT 'Project_A' project,'John' worker,date '2016-05-23' the_date FROM DUAL union all

SELECT 'Project_A','Mary',date '2016-05-23'  FROM DUAL union all

SELECT 'Project_A','Mary',    date '2016-05-24' FROM DUAL union all

SELECT 'Project_A','Steve',date '2016-05-24' FROM DUAL union all

SELECT 'Project_A','Mary',date '2016-05-25' FROM DUAL union all

SELECT 'Project_A','Mary',date '2016-05-26'  FROM DUAL union all

SELECT 'Project_B','John',date '2016-05-23' FROM DUAL union all

SELECT 'Project_B','Steve',date '2016-05-24' FROM DUAL

)

select worker,c23,c24,c25,c26 from

(

  SELECT t.*, dense_rank() over (PARTITION BY worker ORDER BY project) AS rn

  FROM test_data t

)

pivot

(

  MAX(project) FOR the_date in (date '2016-05-23' AS C23,date '2016-05-24' AS C24,date '2016-05-25' AS C25,date '2016-05-26' AS C26)

)

ORDER BY worker;

Results:

WORKERC23C24C25C26
JohnProject_A
JohnProject_B
MaryProject_AProject_AProject_AProject_A
Steve Project_A
Steve Project_B
Paulzip

You cannot dynamically generate your columns (e.g. generate your column names based on the data) without using special techniques (dynamic SQL), SQL has to have static columns at execution time.

Here's another way to do it.

select worker, d1, d2, d3, d4

from

(

  select project, worker,

         dense_rank() over (order by the_date) as date_rank,

         dense_rank() over (order by project) as project_rank

  from test_data t

)

pivot (

  max(project)

  for date_rank in (1 as D1, 2 as D2, 3 as d3, 4 as d4)

)

order by worker

WORKERD1D2D3D4
JohnProject_A
JohnProject_B
MaryProject_AProject_AProject_AProject_A
SteveProject_A
SteveProject_B
1 - 3
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Sep 19 2013
Added on Jul 12 2012
1 comment
492 views