Tab of transaction in the ODI procedure
Hi Experts,Can anyone help me on what and how exactly the Transaction tab in step ODI procedure? Thank you!
Best regards,
VERIFIED BY VISA
Hello
I take you means the deposit Transaction on a step in the procedure box?
That you can use to isolate operations within the session and commit at the end. For example, if you want to load data from various sources in a table, you can set the Transaction for each step of the procedure on the same value of transaction isolation, with the 'Commit' as 'No commit' and when all data are loaded in the table, having a validation step in your procedure to validate this specific transaction. If for any reason, a step fails, then no data within this transaction will be validated in the database.
Its the same as using SQL Developer and have auto commit turned off. You must manually validate the database if you want to see changes to data in another session, or you can role back your changes within the session if you do not want to commit them.
Take a look at the 'IKM Oracle incremental update' IKM - it uses 1 Transaction on these steps, both have a specified "No. Commit":
"update existing lines"
"Insert new lines."
then has a specific validation step thereafter.
I hope this helps.
See you soon
BOS
Tags: Business Intelligence
Similar Questions
-
Make a request for generic insertion in the ODI procedure
Hello
I am writing an ODI procedure to insert into a table my sql is simple:
Insert into ci_txn_header_k
Select t.txn_header_id, f.env_id
of ci_txn_header t, f1_installation f
where t.bo_status_cd = 'HANGS' and t.txn_header_id not in (select txn_header_id from ci_txn_header_k)
I want to make this generic query and use the functions of REF ODI in it.can I get the schema name and table using the Odiref functions. If yes then please guide me howHello
Import all tables referred to in your query in a logic model / models.
ci_txn_header_k
ci_txn_header,
f1_installation fSuppose you import the tables into a logic model / schema called "GENERICS".
Then just reference them using <%=odiRef.getObjectName("L""CI_TXT_HEADER","GENERIC","GLOBAL","D")%>
IM using the "GLOBAL" context in my example above, replace with your context.
So, something like:
Insert in <%=odiRef.getObjectName("L","CI_TXT_HEADER_K","GENERIC","GLOBAL","D")%> k
Select t.txn_header_id, f.env_id
Of
<%=odiRef.getObjectName("L","CI_TXN_HEADER","GENERIC","GLOBAL","D")%> t,
<%=odiRef.getObjectName("L","F1_INSTALLATION","GENERIC","GLOBAL","D")%> f
where t.bo_status_cd = 'HANGS' and t.txn_header_id not in (select txn_header_id from <%=odiRef.getObjectName("L","CI_TXN_HEADER","GENERIC","GLOBAL","D")%>)Hope this helps, check out the ref of the Substitution of the API for a guide, also worth looking at knowledge Modules and how they accumulate clauses in LKM and IKM steps - you can learn a lot by referencing existing code that is supplied with the product.
Concerning
Alastair -
How to call WSDL in the ODI procedure
Hi experts,
Please help me on "how to call the web service in the ODI process."
Thanks in advance
Concerning
PhaniHello
Use the OdiInvokeWebService... Take a look at the options reference manual...
This help you?
Cezar Santos
http://odiexperts.com -
How to initialize the Java variable within pl/sql block in the ODi procedure
I have a step in the procedure of odi that using oracle technology.
I want to initialize the java variable inside that.
Please help me for this.
< @ if (odiRef.getOption ("USE_PUBADMIN_PARAM_TABLE").equals("1")) {@ >}
DENIZ
EH_FAILURE_MESSAGE_TEXT VARCHAR2 (4000);
EH_FIXED_VERSION VARCHAR2 (4000);
EH_ISSUE_TYPE VARCHAR2 (4000);
EH_PRIORITY VARCHAR2 (4000);
EH_SUMMARY VARCHAR2 (4000);
EH_DESCRIPTION VARCHAR2 (4000);
EH_PROJECT_ID VARCHAR2 (4000);
EH_COMPONENT VARCHAR2 (4000);
EH_AFFECTED_VERSION VARCHAR2 (4000);
EH_CUSTOMPROPXML VARCHAR2 (4000);
EH_LOG_JIRA VARCHAR2 (4000);
EH_CONTINUE_ON_ERROR VARCHAR2 (4000);
EH_SEND_MAIL_NOTIFICATION VARCHAR2 (4000);
EH_NOTIFICATION_RECIPENTS VARCHAR2 (4000);
EH_JIRAJARPATH VARCHAR2 (4000);
BEGIN
SELECT
DECODE ('< % = odiRef.getOption ("FAILURE_MESSAGE_TEXT") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_FAILURE_MESSAGE_TEXT'),' < % = odiRef.getOption ("FAILURE_MESSAGE_TEXT") % >") IN EH_FAILURE_MESSAGE_TEXT.
DECODE ('< % = odiRef.getOption ("FIXED_VERSION") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_FIXED_VERSION'),' < % = odiRef.getOption ("FIXED_VERSION") % >") IN EH_FIXED_VERSION.
DECODE ('< % = odiRef.getOption ("ISSUE_TYPE") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_ISSUE_TYPE'),' < % = odiRef.getOption ("ISSUE_TYPE") % >") IN EH_ISSUE_TYPE.
DECODE ('< % = odiRef.getOption ("PRIORITY") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_PRIORITY'),' < % = odiRef.getOption ("PRIORITY") % >") IN EH_PRIORITY.
DECODE ('< % = odiRef.getOption ("SUMMARY") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_SUMMARY'),' < % = odiRef.getOption ("SUMMARY") % >") IN EH_SUMMARY.
DECODE ('< % = odiRef.getOption ("DESCRIPTION") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_DESCRIPTION'),' < % = odiRef.getOption ('DESCRIPTION') % >") IN EH_DESCRIPTION.
DECODE ('< % = odiRef.getOption ("project") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_PROJECT_ID'),' < % = odiRef.getOption ("project") % >") IN EH_PROJECT_ID.
DECODE ('< % = odiRef.getOption ("ELEMENT") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_COMPONENT'),' < % = odiRef.getOption ('ELEMENT') % >") IN EH_COMPONENT.
DECODE ('< % = odiRef.getOption ("AFFECTED_VERSION") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_AFFECTED_VERSION'),' < % = odiRef.getOption ("AFFECTED_VERSION") % >") IN EH_AFFECTED_VERSION.
DECODE ('< % = odiRef.getOption ("CUSTOMPROPXML") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_CUSTOMPROPXML'),' < % = odiRef.getOption ("CUSTOMPROPXML") % >") IN EH_CUSTOMPROPXML.
DECODE ('< % = odiRef.getOption ("LOG_JIRA") % >', '0', PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_LOG_JIRA'),' < % = odiRef.getOption ("LOG_JIRA") % >") IN EH_LOG_JIRA.
Decode('%=odiRef.GetOption("CONTINUE_ON_ERROR") % > ', '0', PBA_PARAM_PKG. ("GET_PARAMETER ('EH_CONTINUE_ON_ERROR'),' < % = odiRef.getOption ("CONTINUE_ON_ERROR") % >") IN EH_CONTINUE_ON_ERROR.
DECODE ('< % = odiRef.getOption ("SEND_MAIL_NOTIFICATION") % >', '0', PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_SEND_MAIL_NOTIFICATION'),' < % = odiRef.getOption ("SEND_MAIL_NOTIFICATION") % >") IN EH_SEND_MAIL_NOTIFICATION.
DECODE ('< % = odiRef.getOption ("NOTIFICATION_RECIPENTS") % >', NULL, PBA_PARAM_PKG.) ("GET_PARAMETER ('EH_NOTIFICATION_RECIPENTS'),' < % = odiRef.getOption ("NOTIFICATION_RECIPENTS") % >") IN EH_NOTIFICATION_RECIPENTS.
PBA_PARAM_PKG. GET_PARAMETER ('EH_JIRAJARPATH') IN EH_JIRAJARPATH
Double;
/ * I want to start as it is below. idon't want to control user source and control target conecpt.
Please help me to below concept.
*/
< @.
String V_EH_FAILURE_MESSAGE_TEXT = EH_FAILURE_MESSAGE_TEXT;
String V_EH_FIXED_VERSION = EH_FIXED_VERSION;
String V_EH_ISSUE_TYPE = EH_ISSUE_TYPE;
String V_EH_PRIORITY = EH_PRIORITY;
String V_EH_SUMMARY = EH_SUMMARY;
String V_EH_DESCRIPTION = EH_DESCRIPTION;
String V_EH_PROJECT_ID = EH_PROJECT_ID;
String V_EH_COMPONENT = EH_COMPONENT;
String V_EH_AFFECTED_VERSION = EH_AFFECTED_VERSION;
String V_EH_CUSTOMPROPXML = EH_CUSTOMPROPXML;
String V_EH_LOG_JIRA = EH_LOG_JIRA;
String V_EH_CONTINUE_ON_ERROR = EH_CONTINUE_ON_ERROR;
String V_EH_SEND_MAIL_NOTIFICATION = EH_SEND_MAIL_NOTIFICATION;
String V_EH_NOTIFICATION_RECIPENTS = EH_NOTIFICATION_RECIPENTS;
String V_EH_JIRAJARPATH = EH_JIRAJARPATH;
@ >
END;
{< @} @ >
I have corrected this problem. No need to search on that.
-
In the mapping of an interface using ODI procedure
Hello
Yesterday, I asked question how will you use ODI procedure in the mappings of an interface for complex operations on the fields?
I don't know if this can be done in ODI.
Any help on this would be helpful.
Kind regards
Mahesh
Don't forget the basic principle of procedure and function.
Now coming to your question, first of all to a large no second thing its an impractical and immature question to ask someone to use the ODI procedure in the mappings of an interface for complex operations on the fields. (Or maybe issue was something and you wrote something. Too bad)
The main reason for the ODI process must allow group of actions that do not fit within the Interface and considered that when something can be achieved with the interface. She's. I always encourage to turn against the interviewer in such circumstances.
What should have been the question is if we can use the DB procedure in the interface mapping. Answer is that it depends. I can use the phases of analysis to write some java-based codes to call a db procedure. But this isn't for my fields from the source to the complex functioning and codes based on java will be isolated from each other.
For a complex operation, you use a function that can be called without flaw inside the DML and DQL statements. Inside the function, you can use as many procedure to do the massage/validation/transformation.
Chantal
-
Pass the value to an ODI procedure
Hello
I need to pass the value of a variable ODI ODI procedure.
Let me tell you what I did:
(1) first make an ODI procedure and passing the name of the variable of ODI that I spend in the options of the procedures such as #V_Test.
(2) now, I did the screenplay for this procedure.
(3) next I used the scenario of the procedure in other ODI package and also added that the variables I have to spend in the procedures.
(4) but now when I'm passing the values of the variables in this package, procedures is not accept the values.
Please suggest.
Thank youSelect the scenario, and then go to the Properties tab. You will get an additional variable that you want to pass.
Provide your value of the variable y -
Module for knowledge loop can be used in the procedure of the ODI
Hello
I have a unique requirement where I need to use the procedure for ForLoop ODI.
Y at - it an option that we can use to create several instructions based on loop For and execute these instructions in particular technologies.
Below is the code I have tried to create for the MS SQL Server technology in ODI procedure. It gives the select statement several times to condition. But somehow the value of i is not passed to select statement
< % for (int i = 10001; i < = 10005; i ++)
{% >}
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = i
Union
< %}; % >
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = 000000
It generates code below:
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = i
Union
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = i
Union
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = i
Union
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = i
Union
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = i
Union
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = 000000
Can you please help me to know how the value of i will impact inside.
Try this...
< %="" pour="" (int="" i="10001 ;" j’ai="">< =="" 10005 ;="" i="">
{% >
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = <%=i%>
Union
<% }; %>
Select * from [DB_SERVER]. [dbo]. [DB_TABLE] where col_1 = 000000
-
How do I inject inside the ODI 11 G PL/SQL (not function procedure)
Hello Expert,
would be like double until OWB and ODI OWB 11 G I wich 'The user function' run PL/SQL and it remove some data in the table and the reel journal, is possible that I can do the same thing in ODI, in my case, I can't call function, or a procedure stored outside the ODI. See below the part of the PL/SQL based on user OWB.
coil MyFile... Journal
command prompt
create table MyTable as
Select a.*
Of...
commit;
command prompt
spool off;
"exit";
Thank you!
You can run a PL within a procedure, you simply copy paste your PL and place in a procedure inside the ODI.
I hope this can help you!
-
Hi all
My name is Alessandro and I am new to the community.
I have a problem with the KM stage custom when I try to pass the variable from the source to the target.
The ODI version tha I use is the 11.1.1.5.0.
I created a stage KM following the instructions of the metalink document (Doc ID 728636.1).
But when I insert the value of the variable in a test table, the value in a table is the name of the variable.
Where I'm wrong?
I am doing thi.
(1) create a step in my goal of shell sql source and javabin KM. In the source tab I get the value of a query, and the name "LAST_UPDATE" column.
In the target tab, I attribute to the variabile jv_last_update the value of the variable #LAST_UPDATE, with the same name in the selection column.
(2) I created a second stage where I insert into a table of the value of the variable jv_last_update (to debug the value of the variable):
(3) when I try to see what I have in the table, the value of any line is the name of the variable "#LAST_UPDATE"; ".
Thanks in advance
AlessandroHi Alessandro,.
Interesting... I have not read the Oracle document you sent yet, but one thing I can guarantee you, is that it doesn't. If Oracle says that it should work, maybe it's a bug, or maybe he has changed on new versions of ODI. I am also on ODI 11.1.1.5 and I tried many different ways to pass SQL results to variables of java with all sorts of different labels, but none of them worked for me as well. But I managed to use it in a different way, so please see below if it matches your needs:
We are just one step. The second is just to show that it worked:
In the first step, on the source tab, select Oracle and point to the logical schema that you want to run the query:
On the target, note the following Java BeanShell code with the SQL that you want to run:
Now your variable must have the correct value of your SQL. To test it, I just write a comment 'Raise' to Jython in the second step:
The result is 'X' as expected:
It will be useful.
Thank you!
-
Procedure of the ODI - Bind Variables in the conditional statements
In an ODI procedure, is it possible to add a conditional statement around bind variable? For example, if I use OdiOutFile as the command on the target and Oracle as the command on the Source, I can use bind variables to fill the data in this table (we are in fact using OdiInvokeWebService and passing a XML structure very complex, but it's easier for testing):
OdiOutFile-FILE = C: / TEST. TXT
< person >
< first > #FIRSTNAME < / first >
< Middle > #MIDDLENAME < / Middle >
< last > #LASTNAME < / last >
< / person >
It is a way to add a conditional statement using one of these bind variables? For example, if I wanted to test #MIDDLENAME null and null value, produced this portion of XML, such as:
OdiOutFile-FILE = C: / TEST. TXT
< person >
< first > #FIRSTNAME < / first >
< % if (#MIDDLENAME! = null) {% >}
< Middle > #MIDDLENAME < / Middle >
< %} % >
< last > #LASTNAME < / last >
< / person >
This type of scriptlet syntax seems to work fine, as long as the binding variable is not in the mix (if I put "true is true" or "true == false" in the case, it shows or does not show this line in the XML file, as expected). I use ODI 11.1.1.7.0
----------------------
Post edited by: KevinPratt
Thanks for the reply! As suggested, in what follows, I changed the command and it works as you want
OdiOutFile-FILE = C: / TEST. TXT-APPEND
< person >
< first > #FIRSTNAME < / first >
< @ if (!) (("#MIDDLENAME".equals(""))) {@ >}
< Middle > #MIDDLENAME < / Middle >
{< @} @ >
< last > #LASTNAME < / last >
< / person >
Using the syntax <@ ...="" @="">serve your purpose. Also, I think you might want to include the variable binding in the quotation to avoid syntax errors.
@>
-
Dynamics of PL/SQL code in the procedure of the ODI
Hi guys:
I have a PL/SQL code to run in an ODI proc that changes because of a loop.
I have to update the many tables with the same prefix and its sufix is the dynamic part of my PL/SQL. Also, I need to adjust the DT_ETL (I already have a variable in my package with the sysdate) and the limit of a rownum.
My variables are:
vGET_CD_BASE*.
vQTD_REG_UPDATE*.
vETL_DATE*.
PL/SQL is described below (with dynamic parts of it as ODI #vXXXXX variables):
DECLARE
CURSOR v_Cur IS
SELECT ROWID KEY_ROW IN GG_DATA. WRK_SN_DET_ITEM_EXTR_PARC_ * #vGET_CD_BASE * WHERE DT_ETL = TO_DATE('01/01/1900','DD/MM/YYYY') and rownum < * #vQTD_REG_UPDATE *;
TYPE t_Tabela IS TABLE OF ROWID directory INDEX;
r_Reg t_Tabela;
BEGIN
OPEN v_Cur.
LOOP
Get the v_Cur COLLECT LOOSE r_Reg LIMIT 100000;
FORALL i IN 1.r_Reg.COUNT
UPDATE GG_DATA. WRK_SN_DET_ITEM_EXTR_PARC_ * #vGET_CD_BASE *.
SET DT_ETL = TO_DATE ('* #vETL_DATE * ',' DD/MM/YYYY HH24:MI:SS')
WHERE ROWID = r_Reg (i);
EXIT WHEN v_Cur % NOTFOUND;
COMMIT;
END LOOP;
CLOSE V_Cur;
COMMIT;
END;
What should I change to make it work of PL/SQL in the ODI process?
Kind regards.
Luiz AraujoHi Buchu.
What if you put the name of the table in the variable instead of concatenate in the PL/SQL code.
This is what I did and seems that worked here.
(1) create a variable for the name of the table as follows:
Variable name: var_Table_Dual
Source code: select 'DOUBLE' double(2) create a PRC_VAR_CHANGE procedure
(3) create a CMD_VAR_CHANGE command
Command:
declare vText varchar2 (100): = ";Start
SELECT sysdate in vText #var_DUAL;
end;
(4) create a Package for the test.
First step: Refresh variable
Second step: call the procedure.The result of the operator for the procedure was the following code.
declare vText varchar2 (100): = ";Start
SELECT sysdate from vText OF #DATA_WAREHOUSE. INC_SYSDATE;
end;
Try and let me know.
Cheers mate!
-
use the stored procedure VARIABLE in an ODI procedure
Hello
I have a stored procedure that takes custId as an input parameter and returns the age as output parameter.
custId is a varaible ODI that we spend during execution.
I want to insert the age value in a table.
declare
cust_age customer_details.age%type;
Start
FETCH_CUSTOMER_DATA(#Customer.CustomerID,cust_age);
end;
INSERT INTO CUSTOMER_AGE VALUES(#customerid,*cust_age*)
Thank you.Hello
Just use the insert in an ODI procedure in an anonymous pl/sql block.
I mean:
declare
cust_age customer_details.age%type;
Start
FETCH_CUSTOMER_DATA(#Customer.CustomerID,cust_age);
INSERT INTO CUSTOMER_AGE VALUES(#customerid,*cust_age*);
end;
Ok?
Cezar Santos
http://odiexperts.com -
"CONNECT BY" in ODI. Transaction for the entire scenario
Hello world!
My task is to migrate configuration-> a chronogram table Table_A Table_B and Table_A Table_C.
Move the data to the Table_B is easy, but one of the columns in the Table_A composed of string ("Stri1; ST2; Str3") that must be inserted into Table_C as written below:
Table_C
Id_PK_TableA Str1
Id_PK_TableA Str2
Id_PK_TableA Str3
In the database, the way to get it would be sql statement with the "connect to." How does in ODI?
The Table_A are only logged data (CDC), so I can't read it twice. I considered to copy the Table_A in the temporary table, but if I do an exception in the transformation I would not not changed the Table_A CDC data.
Maybe can I set a transaction for the whole scenario? Is this possible?
Kind regards
MarcinHello
Sure, you can read data from CDC several times... Use compatibility mode and consume the Subscriber after run UI 3 times.
Make sense?
Cezar Santos
[www.odiexperts.com] -
Hello
I currently still use ODI 10 g.
I have interfaces and pacakges that works properly.
And I created a database procedure.
Name of the procedure: Test_Procedure
I want run this procedure of ODI, rather than creating a new post in the database. (Run it after my interfaces are executed successfully)
If possible can you please get me how to approach.
I tried this approach:
1 role "Run" for the user of ODI awarded.
2. in the project that contains interfaces, modules of knowledge etc...
There is a procedure - law clicked procedure - insert available 2 options, import procedure.
Then, click on the Insert procedure.
Opens a window of the new procedure.
Name: Test Procedure
Technology source: undefined
The target technology: Oracle (as my target database is oracle)
Add details.
Opens the new window command.
Name: Test Procedure
Log count: undefined
Log level: 5
Command on the target:
Tecnology: Oracle, Context: Global, diagram: logical schema of my target, Transaction: autocommit
commnad: run Test_Procedure;
Executed. But displays error - Sql statement invalid.
I would like to know how to proceed.
Thank you.
Hi, GRK,.
The approach is good, you were near. Unfortunately, Execute is not recognized, you must use a PL/SQL block:
BEGIN <%=odiRef.getSchemaName()%>.MY_STORED_PROC; END;
GetSchemaName using is to get the physical schema related to the schema logic you choose, during the execution.
It will be useful.
Kind regards
JeromeFr
-
detect the source procedure variables
Hi guys,.
Suppose I have a procedure with the oracle of the source, and I give a simple query (SELECT TALK, BLAH TIME)
and on the target, I would use jython to process the data from the source.
1. is there a conclusion on the way in which we could get all the variables in the source?
2 is it possible to get the result from the query result set?
in the target control, I could send the value of the source query using such #TALK and #TIME setting
but I just can't understand how the result of the loop and get all the values of ranks
Thanks in advance
herl
Published by: user3918409 on June 29, 2009 03:49Hello Heri,
It's much easier than you can imagine... None... In fact, as I understand it, you already have all necessary.
In an ODI procedure when a query of the source is used, it creates something as a "slider" which will execute the Code tab target once for each returned row.
I mean, iif your select return 4 rows, the target code (jhyton as you wish) will be executed 4 times.
The way to reference from the source variables is "#my_column_from_select" where "my_column_from_select" is the name or alias defined in the source query, and you must refer to each of them.
This help you?
Maybe you are looking for
-
Win7 won't start plus-HP Pavilion dv7-6b32us
My HP dv7-6b32us frozen on me this morning. The last two days, it was slow. I used the power button to shut down physically, and when I tried to start it up, I was given the choice: Start the reboot system (recommended) Start Windows normally When
-
my mother has a xp computer. where can I get a copy of xp to extract a disc. because the old operating system is buggy?
-
Original title: URLS not clickable links WinXP SP3 all updatesAMD Athlon2 2.7 GHZ2 GB 800 mhz SDRAM256MB NVIDIA GeForce video I'm more able to launch a web page, when I click on the URLs in Email, Skype and other internet applications, etc. I downloa
-
It is a HP touchscreen computer. It runs on Vista Home Premium. It is about 3 years old.
-
Upgrade of Ram card mother 8700 XPS
I bought the regular version of the 8700 XPS that came with 8 GB of ram not the 8700 XPS Special Edition. I got contradictory information service to Dell customers on the amount of ram, the card mother the regular XPS 8700 supports. When I bought, bu