Oracle ODI ships with a bundle of very useful and quite diverse knowledge modules but at the same time one of the basic need it to get a customized version of the same knowledge module to get more control and gain more functionality. So how can we do that ?
Problem Statement :
The Scenario we are taking about today is very simple one , if you are using any Integration Knowledge Module it creates a table with I$_
For example , I am using "IKM Oracle Incremental Update" and what it does is it creates an table with I$
The steps are as follows
1 - Go to the project folder --> Knowledge Modules -- > find IKM Oracle Incremental Update
2 - Right click on the selected module above and click on "Duplicate Selection".
3 - Give it a suitable name e.g. "Custom_IKM Oracle Incremental Update"
4- Double click on the Module and click on "Details" to see the lost of steps for this module.
5- You would find a step with a title as " Create flow table I$".
6- Select that and lets see the code looks like as follows
create table <%=odiRef.getTable("L", "INT_NAME", "W")%>
(
<%=odiRef.getColList("", "[COL_NAME]\t\t[DEST_WRI_DT] NULL", ",\n\t", "", "")%>,
IND_UPDATE CHAR(1)
)
<%=odiRef.getUserExit("FLOW_TABLE_OPTIONS")%>
7- Add the custom logic to append session number with the table being created.
create table <%=odiRef.getTable("L", "INT_NAME", "W")%>_<%=odiRef.getSession("SESS_NO")%>
(
<%=odiRef.getColList("", "[COL_NAME]\t\t[DEST_WRI_DT] NULL", ",\n\t", "", "")%>,
IND_UPDATE CHAR(1)
)
<%=odiRef.getUserExit("FLOW_TABLE_OPTIONS")%>
8- Save your knowledge module and that is it.
9- Use the Custom Knowledge Module in your mapping .
You would see that the I$ table is created with a session post fix so any other instance of same job will not disturb the running flow.
Similarly you can add new steps , make them conditional and add new options to customize it more as per requirements.
Hope that helps.
Thanks