Using ODI Variable in Topology
Since my source databases are many in number I am trying to use ODI Variable in topology to access the Source Databases details from a Table.
Please can anyone help me here....
Have a read here for details on using variables in topology.
Ok?
Cheers
John
http://john-goodwin.blogspot.com/
Similar Messages
-
Dymanin File Name Creating Using ODI variable
Hi All,
I am trying to create a flat file dynamically using ODI variables. I am following a document in metalink (Using A Dynamically Specified File Name Or Directory Name With ODI [ID 423635.1]). However, I am getting the following error, whenever I try to execute the interface:
java.lang.NullPointerException
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execCollOrders(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSqlI.treatTaskTrt(SnpSessTaskSqlI.java)
at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)
at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)
at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)
at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
at com.sunopsis.dwg.cmd.e.i(e.java)
at com.sunopsis.dwg.cmd.h.y(h.java)
at com.sunopsis.dwg.cmd.e.run(e.java)
at java.lang.Thread.run(Unknown Source)
IKM: IKM SQL to File append
I am sure that it is unable to locate the file. May be the variable value is not passed, not sure. But, if I mention a name like abc.txt, it works. It creates a new file with abc.txt. However, when I try to use a variable, it throws null pointer exception.
Thank you
KKHi Nitesh,
I am really not sure what exactly you mean by declare a variable in a script. I create a new variable and used it as a name for the flat flie model. I defined a SQL that contactenates sysdate with a string. Thank you for your help!
Regards,
KK -
How to use ODI Variables in Jython
Hi, im doing a dynamic interfaz .. so i make a connection to bd.
When i try to do it .. i got an error...
How can i access to the odi variables from odi..
this is my code ..
<%
import java.sql.*;
import java.io.*;
BufferedWriter bw = new BufferedWriter(new FileWriter("c:\log.txt"));
StringBuilder strB = new StringBuilder();
Class.forName("oracle.jdbc.driver.OracleDriver");
String ip = "#PROJECT.IP";
String url = "jdbc:oracle:thin:@"+ip+":1521:orcl";
Connection con = DriverManager.getConnection(url,"snpw","admin");
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
bw.write(" raise(' ");
out.print(" raise(' ");
String str = "SELECT c.var_name,d.project_name FROM snp_package a JOIN snp_step b On (a.i_package = b.i_package) JOIN snp_var c ON (b.i_var = c.i_var) JOIN snp_project d ON (c.i_project = d.i_project) WHERE UPPER(pack_name) = upper('DebugJava')";
ResultSet rs = stmt.executeQuery(str);
while(rs.next()){
String var_name = rs.getString("var_name");
String project_name = rs.getString("project_name");
out.print(var_name+" #" project_name"."+var_name+"\n ");
bw.write("#STUFF."+var_name);
bw.write("')");
out.print("')");
rs.close();
bw.close();
stmt.close();
con.close();
%>
this is the error ...:
The application script threw an exception: java.sql.SQLException: Excepción de E/S: The Network Adapter could not establish the connection BSF info: DebugVariables at line: 0 column: columnNo
Iknow tha is taking "#PROJECT.IP" like my ip .. but there is a variable that is on my package with a assiged value 127.0.0.1
but jython is not taking it !!
I make a raise to the variable .. and yes the variable take de value "127.0.0.1" but not in my jython code
note: My variable is linked with OK to the jython procedure on my package
Can i acces to the variable? from jython how?.
Thanks in advanced!!
Edited by: user11334562 on 28-abr-2010 15:121. This is not a jython code, this is beanshell code. Anything you put between <% and %> is beanshell code which is sort of a parser code for ODI. Check out
http://www.beanshell.org/
2. Your expression for "url" variable is wrong. If you want to concatenate strings, you have to use + sign i.e it should be:
String url = "jdbc:oracle:thin:@"+ip+":1521:orcl";
Other statments need to be adjusted similar way.
3. Why would you want to go through so many trouble? Just extract the SQL into a file using ODI SQLUnload tool. The sql should be:
SELECT c.var_name||' #'||d.project_name||'.'||c.var_name FROM snp_package a JOIN snp_step b On (a.i_package = b.i_package) JOIN snp_var c ON (b.i_var = c.i_var) JOIN snp_project d ON (c.i_project = d.i_project) WHERE UPPER(pack_name) = upper('DebugJava')
4. How does printing a set of variables from a particular package help you to write dynamic interface? -
How to use odi variable in java code.
Hi,
I am trying to calculate check sum of a file and need to capture that in a odi variable...
I wrote code like this(selected technology as java bean shell)
<@
import java.io.*;
import java.util.zip.*;
public class checksum {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream(new File("c:/dummy.txt"));
CheckedInputStream cis = new CheckedInputStream(fis, new CRC32());
BufferedInputStream in = new BufferedInputStream(cis);
while (in.read() != -1) {
#checksum = cis.getChecksum().getValue();
}@>
But I am not able to get that value...
I tried in another way like this
<@
import java.io.*;
import java.util.zip.*;
public class checksum {
public static void main(String[] args) throws Exception {
long result;
FileInputStream fis = new FileInputStream(new File("c:/dummy.txt"));
CheckedInputStream cis = new CheckedInputStream(fis, new CRC32());
BufferedInputStream in = new BufferedInputStream(cis);
while (in.read() != -1) {
result= cis.getChecksum().getValue();
@>
In odi variable refreshing mode i selected schema as memory_engine and wrote
select '<@=result@>' from dual;
even this wont work for me :(
Anyone pls help me in this...
Thanks in advance
PavanHi Phani,
Thanks for the reply. I resolved this. The mistake is I wrote java code in a class,in main function. I removed class and main function. Now I am able to capture value into Odi variable...
I modified code as
<@
import java.io.*;
import java.util.zip.*;
long result;
FileInputStream fis = new FileInputStream(new File("C:/dummy.txt"));
CheckedInputStream cis = new CheckedInputStream(fis, new CRC32());
BufferedInputStream in = new BufferedInputStream(cis);
while (in.read() != -1) {
result=cis.getChecksum().getValue();
@>
finally retrieving result value from dual
select '<@=result@> from dual
Edited by: 908443 on Jan 16, 2012 10:42 PM -
Using ODI variable in Header File
Hi,
I want to append header/footer file to the main data file.
Is it possible to do this:
1) I want to write to the header file - table name, rowcount, .. and various other detials. But i do not want to use an interface/odioutfile/odisqlunload for this.
2) I want to use ODIvariables and write the varaible value to Header.txt file.
Is such a thing possible?
If NO, then what could be the other soultion?
Thanks.Thanks Dev.
I followed the following steps
1. Refresh the variable for header (OK)
2. Call the Variable using OdiOutFile [ Header is populated ] (OK)
3. Call the Interface SQL to File Append [ In the option have the Header as no since you are getting the Header from the Variable ] (OK )
When I see my output file its coming as this
2stt_acct:1234 (2 is the row count - supposed to be a separate line)
stt_acct:5678
I wanted the file to be the following
2 (header representing row counts)
stt_acct:1234
stt_acct:5678
How can I make this happen -
Can we assign jython variable value into ODI variable?
Hi Team,
We are trying to save jython variable value into ODI variable so that ODI variable can use in later steps.
we are facing failure regards same.
Please suggest us so that we can use ODI variable value in later steps.
Thanks
Ankush.See if this post help you :- How to assign value for a ODI variable from Jython Script
Doc id 424579.1 on metalink should help. -
Assign value to ODI variable from Jython
Hello Experts,
I have a procedure where I'm using Jython code. I want to assign a value to an ODI project variable from a Jython function:
Example:
#COUNTER = len(v_jythonList) ---> being #COUNTER the ODI project variable and len() the jython function
Now, i noticed that using ODI variables adds # sign which is use for comments in Jython code. Is there a way to assign values to ODI variables from Jython script?
Please help!.
Thanks.
Pablo.Hi,
Does this post help you :- How to assign value for a ODI variable from Jython Script
Doc id 424579.1 on metalink should help.
Cheers
John
http://john-goodwin.blogspot.com/ -
Hi ,
Can anyone tell me , how to use odi variables in odi procedures and functions .
Thanks
BhoopendraHi Bhoopendra,
Check the below link,
http://download.oracle.com/docs/cd/E14571_01/integrate.1111/e12643/procedures.htm#CHDCJHJF
Thanks,
Guru -
Hi All,
In ODI do we use variables in topology as well?
If so , 1) for which scenarios we use it 2) how we can implement that?
Please explain with examples.
Thanks,
Pankaj KabdalLets take a fictitious scenario where more than 6 environments are there. Your codes needs to be passed trough all of them and the user for the same table in each env is different. Also after deploying your code in prod there are chances that the user might change for the target table but not the password. In that scenario the Admin guy needs to manually update the data server every time user get changed.
Instead logging into ODI you can configure a table which will store the username. So what you can do is to read this table to fetch the username and substitute it in dataserver via odi variable.
select username from user_config where context='<%=odiRef.getContext( "CTX_Name" )%>'
Thats it -
Problem: Use an ODI variable in a Java Procedure
Hi and thanks in advance,
i need to use a project variable in a java procedure i've written. In particular i should read a file (and manage it...), but its name is stored in avariable called #fileName that i refresh each time.
writing something like:
<% FileInputStream fis = new FileInputStream(C:\\"+"#filename");
etc.
etc.
%>
doesn't work...
How can i use the value of my ODI variable inside the Java code?
Please, help me if you can...
Thank you very much.Any Idea? Please, this question is blocking me...
-
How to use an ODI variable in an IKM?
Hi,
I am trying use the value of ODI variable in IKM SQL Incremental Update. The variable contains the count of error records. My problem is how to use the variable in the IKM. I am trying to use the variable in an If condition like:
<%if(%>#COuntReprocessRec<%>0){%>
I have declared the variable as Numeric.
Thanks.Hi,
For the below requirement follow the below steps.
I have to execute the 'Insert of flow into I$ table' step of IKM, only if Error records are present in my source table. The IKM i am using is IKM SQL Incremental Update.
Create a new step before 'Insert of flow into I$ table' step, i say "Check Error Record".
Command on source
Technology : <your source technology>
Schema: Whichever schema points to ur source error table
Command:
select count(*) as row_count from <table_name>
Command on Target
Technology : Jython
Command:
CountData=#row_count
if CountData>0:
##raise ' \n\nThere are error records in source error table'
Thats it.
This will stop the flow in case of error records persist in ur source table, else it allow the flow to next Insert I$ step.
P.S: Replace ## with TAB.
Thanks,
Guru -
Is it possible to use a ODI variable in a procedure
I am trying to call an external java program from the operating system (MS-DOS) using a procedure. This is possible using the os.system("<command>") syntax - declaring a procedure to use Jython. However, I want to be able to pass two ODI variables to the java program. I do not seem able to do this, is it possible ?
I also tried calling the OS command from within a package - but again cannot get the OS command to pass the variables.
I would appreciate any help on this.Thanks for your response.
I am still unable to do this.
Problem is the procedure is "Jython" and it does not know what the ODI variables are.
I basically have two variables source and target which need to be passed to a java procedure.
So I created two VARIABLES in ODI - source and target.
I then have a procedure with the command;
import os
import sys
cmd = "java ConvFile"
rc = os.system(cmd)
when this runs it does not pass the variables.
if you have
import os
import sys
cmd = "java ConvFile"+#Tax_Updates.SourceFile+#Tax_Updates.TargetFile
rc = os.system(cmd)
then it does not know what #Tax_Updates.SourceFile and #Tax_Updates.TargetFile are and so just passes them as strings.
If you still think it is possible or anyone esle knows can you elaborate a little on the solution.
Thanks
Nick -
How to use ODI procedures into a ODI variable
Hi,
I have the below condition
select c1 from table where c1>#ODIVAR1 and use the output of this query in a variable to define the package flow
If output=0 package flow goes as XXX
else
flow goes as YYY.
So please suggest how to use a ODI variable to capture the procedures putput and use it in package flow in this case.
Thanks,
Naveen.Step1 . Refresh the variable in the package, which have this query select c1 from table where c1>#ODIVAR1
Step2. Evaluate above variable (operator = , value 0 )
Step 3. If true Package flow xxx , else false yyy
Please close the thread once you get the required flow. -
Does anyone know if it is possible to use a Variable inside of another variable??
first variable is Current_Sysdate which the query is:
Select sysdate
from dual
Second, I have a variable called Count_Rec: this is to count the records...
The SQL that drives this is:
Select count(r2.pn)
from register r2, pol p2
where p2.pdt =
(select max(p3.pdt)
from pol p3
where p3.pn = p2.pn and
p3.pdt = to_date('#Current_Sysdate', 'mm/dd/yyyy')) and
r2.pn = p2.pn and
r2.pdt = p2.pdt
when i test this in ODI i get an error:
Error while executing query
ORA-01858: a non-numeric character was found where a numeric was expected.
This is being caused by the "*** r3.pdt = to_date('#Current_Sysdate', 'mm/dd/yyyy')) and ***" line (I know this because if i remove this line it compiles completely)
My question is ... is it possible to use a variable within another variable in ODI??? if so does anyone have an idea what i am doing wrong here???
I realize i could just replace the #Current_Sysdate with sysdate but the idea is they may want to run this for a different date... it may not always be sysdate... so they wanted a variable in that spot...DUplicate post
-
Can ODI use environment variables?
Running on Linux/Unix, can ODI use environment variables? For example, export LANGUAGE="en", and anyway in ODI can get variable LANGUAGE?
It is easy.
Use the following command at variable Refresh tab and let the Logical Schema to the file too...
Just change the file path (c:/temp/cezar_test.txt)
Select COLUMN_1 from TEST
/*$$SNPS_START_KEYSNP$CRDWG_TABLESNP$CRTABLE_NAME=TESTSNP$CRLOAD_FILE=c:/temp/cezar_test.txtSNP$CRFILE_FORMAT=DSNP$CRFILE_SEP_FIELD=3BSNP$CRFILE_SEP_LINE=0D0ASNP$CRFILE_FIRST_ROW=0SNP$CRFILE_ENC_FIELD=SNP$CRFILE_DEC_SEP=SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=COLUMN_1SNP$CRTYPE_NAME=STRINGSNP$CRORDER=1SNP$CRLENGTH=50SNP$CRPRECISION=50SNP$CR$$SNPS_END_KEY*/
For this command the file must to have just just the value in one line.
Does it help you?
Edited by: Cezar Santos on 23/01/2009 16:14
Maybe you are looking for
-
Coloring messages in mailboxes with Rules.
I am struggling to get all my mail rules to work again after some reorganizing. For instance, this is not working if I select already sorted mailboxes, and do "Apply Rules". Also on my IMAP-mailboxes on my @me.com account. Thankul also for manuals ti
-
Certain ports I will hardly or ever use like: SMTP 25, telnet 23, SNMP 161, etc I want to make my network more secure by closing some ports, but how is this done? The manual says nothing about such feature. Thank you.
-
I have recently bought premier elements 11. I open the icon, click on new project, it looks to try and open but it then close. I then get a message... We have detected an incompatible display driver. To get a better and faster performance, please upd
-
Safari wont open web pages using Vista
After installing Safari on a windows vista PC I keep getting the same message Safari can't open the page. I am able to open web pages with internet explorer
-
Patch Successful on One system but not another?
I am wondering if there is a Cache dump or process of getting a patch system to recover from a failure where the patch has deployed successfully on a different system. There are a variety of errors depending on the patch as well as device. I see some