Skip to main content
Announcements
July 15, NEW Customer Portal: Initial launch will improve how you submit Support Cases. IMPORTANT DETAILS
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Adding Records Sequentially

Hi,

 

I have fetched around 10 records from data base table (Table name “T1”) using some stored procedure. Now I want add these records in to another table (Table name “T2”) one by one. The target table "T2" in which these 10 records will be added have an identity field.

 

On addition of each of these records we need to update the identity field generated for each of these records from Table “T2” to table “T1”.

 

Can anyone please help me how to handle this?

Labels (2)
1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

Hi,

 

Just to make my query more simple. We are trying to catch the value being sent from method of DOTNET DLL in the JOB? But are getting null values when we try to print the fetched value in console.

 

Any help on this would be great.

 

 

View solution in original post

4 Replies
TRF
Creator III
Creator III

Hi,

I'm afraid you have to query the table T2 content after the insert has been achieve to retrieve the identity field value for every new record, the you can update the table T1.

If you are sure there is no risk of conflict with an other process authorized to insert records in table T2, you may also retrieve the current max value from existing rows before to inject new rows from your job.

In this case, you just have to manage a sequence on Talend side.

Suppose the current max value has been retrieved in the global variable called "maxId", you have to add a tMap or tJavaRow before the tOracleOutput component to compute the id value for each row with the following (here in a a tJavaRow):

output_row.Id = Numeric.sequence("seqId", (Integer)globalMap.get("maxId")+1, 1);

With this, the field called 'Id" is populated with the value of the sequence called "seqId" with is created with the current value + 1 and incremented by 1 for each row.

Now you can update the table T1 without having to query the table T2 again.

Hope this helps.

Anonymous
Not applicable
Author

Hi,

 

Technique mentioned by you won't work as there is risk of conflict with an other process authorized to insert records in table "T2".

 

I am using DoTNet DLL to insert rows in table "T2". Can't we return identity field value from DOTNET class being called to the JOB and then update that returned identity field value in table "T1"?

 

Can you tell me how this can be done, i.e. catch the value returned by DOTNET class and update that value in table "T1" from the job itself? This needs to be repeated for all records. 

Anonymous
Not applicable
Author

Hi,

 

Just to make my query more simple. We are trying to catch the value being sent from method of DOTNET DLL in the JOB? But are getting null values when we try to print the fetched value in console.

 

Any help on this would be great.

 

 

Anonymous
Not applicable
Author

Hi,

 

I have solved the problem. Thanks