SQL in ODI procedure truncated while execution

My repsoitory is upgraded from Sunopsisv3 to ODI 10.1.x . I was trying to execute the package . There is a procedure with a SQL in it. While executing it works fine sometimes and sometimes it errors out saying Syntax error or table alias not found .When i look into the logs i see that the query is truncated as a result it failed.During success the query looks fine.
It is behaving in a wierd way. Is there any solution to fix this issue.
Thanks,
Gupta.

Hi,
Try use #:
begin
select ename from emp where empid=#empno;
proc1(#empno);
end;
character '#' replace variable with value in the source
Edited by: Uthred on Sep 9, 2008 11:43 AM
Edited by: Uthred on Sep 9, 2008 11:43 AM

Similar Messages

  • How to list all physical schemas in ODI procedure

    Dear Experts,
    I am trying a requirement which is to execute a set of sqls in all the schemas configured in ODI.
    for example
    1) I have four data servers/physical schemas configured in Physical Architecture under Oracle techonlogy.
    2) Created corresponding 4 logical schemas for Oracle.
    3) Mapped using two different contexts.
    4) one context mapped two schemas and another mapped two other schemas.
    now, I need to exeture the following sql for all the Oracle schemas mapped in context selected.
    just for testing: select dummy from dual
    I would like to execute this sql in ODI procedure for every schema mapped in the selected context in single execution.
    Can any expert help me on this solution?
    - Raja

    Raja,
    I was actually talking about multiple ODI Step command rather than multiple procedure. What you are trying to achieve is difficult unless you specify the logical schema in ODI Procedure , becuase getInfo will throw Null pointer if we dont specify the logical schema ,
    the getSchema needs Logical schema . The other way i can think query in work rep tables and get the schema name and pass it .
    Any way in case your figure out without passing Logical schema . Please share with us , i would be interested in learning the trick .

  • Error while execution ODI procedure : java.lang.NullPointerException

    Hi,
    I`m trying to execute a simple ODI procedure and I`m getting the following exception:
    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.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.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.DwgCommandScenario.treatCommand(DwgCommandScenario.java)
         at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
         at com.sunopsis.dwg.cmd.e.j(e.java)
         at com.sunopsis.dwg.cmd.g.F(g.java)
         at com.sunopsis.dwg.dbobj.SnpScen.a(SnpScen.java)
         at com.sunopsis.dwg.dbobj.SnpScen.localExecuteSync(SnpScen.java)
         at com.sunopsis.dwg.tools.StartScen.actionExecute(StartScen.java)
         at com.sunopsis.dwg.function.SnpsFunctionBaseRepositoryConnected.execute(SnpsFunctionBaseRepositoryConnected.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execIntegratedFunction(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.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.DwgCommandScenario.treatCommand(DwgCommandScenario.java)
         at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
         at com.sunopsis.dwg.cmd.e.j(e.java)
         at com.sunopsis.dwg.cmd.g.z(g.java)
         at com.sunopsis.dwg.cmd.e.run(e.java)
         at java.lang.Thread.run(Thread.java:595)
    The source of the procedure:
    select
    P_ID,
    P_NAME,
    to_char(START_TIME_KEY,'DD-MON-YYYY HH24:MI:SS') as START_TIME_KEY,
    to_char(END_TIME_KEY,'DD-MON-YYYY HH24:MI:SS') as END_TIME_KEY,
    P_IS_ACTIVE,
    from persons
    The target of the procedure:
    DECLARE
    v_START_TIME_KEY DATE;
    v_END_TIME_KEY DATE;
    v_NAME VARCHAR2(200);
    v_ID NUMBER;
    BEGIN
    v_NAME := '#P_NAME';
    commit;
    END;
    ODI version: 10.1.3.5.5
    Source and target technology: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
    Thanks!

    Hello,
    Is your aim to get the Name from the table into the variable. ?
    And if there is only one row from the table you can use refresh variable to get the name:
    if there are more rows and you want to do somehthing repeatedly using the name, then you need to use the method you have described.
    Declare the variable in the pakcage and give some default value to the variable then call the procedure.
    Regards
    Reshma

  • Dynamic PL/SQL code into ODI Procedure

    Hi guys:
    I have a PL/SQL code to execute into a ODI proc that changes because of a loop.
    I have to update N tables that have the same prefix and its sufix is the dynamic part of my PL/SQL. Also I have to set the DT_ETL (I already have a variable in my package with the sysdate) and the limit of a rownum.
    These are my variables:
    vGET_CD_BASE*
    vQTD_REG_UPDATE*
    vETL_DATE*
    The PL/SQL is described below (with the dynamic parts of it as ODI variables #vXXXXX):
    DECLARE
    CURSOR v_Cur IS
    SELECT ROWID KEY_ROW FROM 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 INDEX BY BINARY_INTEGER;
    r_Reg t_Tabela;
    BEGIN
    OPEN v_Cur;
    LOOP
    FETCH v_Cur BULK COLLECT INTO 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 do I have to change to make this PL/SQL works in ODI Procedure?
    Regards.
    Luiz Araujo

    Luiz,
    One way you could do is by using the "Command on Source" and "Command on Target" feature of an ODI procedure:
    In Command on Source, you can write query like:
    >
    select vGET_CD_BASE, vQTD_REG_UPDATE, vETL_DATE from some_configuration_table_containing_n_rows
    >
    In Command on Target, you can write:
    >
    DECLARE
    CURSOR v_Cur IS
    SELECT ROWID KEY_ROW FROM 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 INDEX BY BINARY_INTEGER;
    r_Reg t_Tabela;
    BEGIN
    OPEN v_Cur;
    LOOP
    FETCH v_Cur BULK COLLECT INTO 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;
    >
    So, for "n" records that are returned by the source query, your PL/SQL package will run "n" times, each time substituting the values of vGET_CD_BASE, vQTD_REG_UPDATE, vETL_DATE respectively.

  • How to run dynamic SQL from an ODI procedure step

    I am on ODI 11.1.1.6.4. From within an ODI IKM step I have no problem running a procedure step like the following which calls a pl/sql procedure to get SQL text then later runs that code. Is there anyway to do the same from within an ODI procedure? I've tried a couple of variations and can not seem to get the parsing levels to resolve within a procedure like they resolve from within a KM step.
    <@
    /* Setup Java variables */
    String out_SQL = "";
    try
    java.sql.Connection sourceConnection = odiRef.getJDBCConnection("SRC");
    String sqltxt = "{call set_sql(?)}";
    java.sql.CallableStatement pstmt = sourceConnection.prepareCall(sqltxt);
         try
         pstmt.registerOutParameter( 1, java.sql.Types.VARCHAR);
         pstmt.execute();
    out_SQL = pstmt.getString(1);
         catch(java.sql.SQLException ex)
              errMessage = ex.getMessage();
              errMessage = errMessage.replace("'","");
         finally
              pstmt.close();
    catch(java.lang.Exception e)
         errMessage = e.getMessage();
         errMessage = errMessage.replace("'","");
    @>
    BEGIN
    -- The SQL that I want to run
    <@
    out.println(out_SQL);
    @>
    -- Error handling
    <@ if ( out_SQL.length() ==0 ) { @>
         raise_application_error(-20101, '<@=errMessage@>');
    <@ } else { @>
         dbms_output.put_line('Successful.');
    <@ } @>     
    END;
    ------

    Please understand that I know that I can do this all within PL/SQL -- I am explicitly doing it the way I have outlined because I want to better understand the parsing levels/behavior within ODI procedures and I want to understand why KMs steps behave differently.
    Another observation -- putting this all within a pl/sql block prevents ODI from properly capturing insert/update/delete row counts like it would if it were running a SQL statement.
    So the question remains -- is there a way to run a dynamic SQL statement in an ODI procedure where the SQL statement is generated from within an Oracle procedure call and then run as SQL within an ODI procedure step? Best would be if there is an example of how this can be done.

  • 7000 : null : java.sql.SQLException: ODI-40400: Invalid format description

    Hello all,
    I am getting this following error , when trying to load from files to Oracle (used this link as reference : http://john-goodwin.blogspot.com/2009/06/odi-series-processing-all-files-in.html)
    ODI 11g 11.1.1.6
    Database
    Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    PL/SQL Release 11.2.0.2.0 - Production
    CORE     11.2.0.2.0     Production
    TNS for Linux: Version 11.2.0.2.0 - Production
    NLSRTL Version 11.2.0.2.0 - Production
    any help would be greatly appreciated
    7000 : null : java.sql.SQLException: ODI-40400: Invalid format description
    java.sql.SQLException: ODI-40400: Invalid format description
         at com.sunopsis.jdbc.driver.file.impl.metadata.MetaDataExtractor.buildTableDescFromRequestSQLExceptionOnly(MetaDataExtractor.java:479)
         at com.sunopsis.jdbc.driver.file.FilePreparedStatement.buildGenericRow(FilePreparedStatement.java:75)
         at com.sunopsis.jdbc.driver.file.FilePreparedStatement.<init>(FilePreparedStatement.java:57)
         at com.sunopsis.jdbc.driver.file.FileConnection.prepareStatement(FileConnection.java:299)
         at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at oracle.odi.core.datasource.dwgobject.support.OnConnectOnDisconnectDataSourceAdapter$OnDisconnectCommandExecutionHandler.invoke(OnConnectOnDisconnectDataSourceAdapter.java:200)
         at $Proxy2.prepareStatement(Unknown Source)
         at oracle.odi.runtime.agent.execution.sql.SQLCommand.doInitializeStatement(SQLCommand.java:82)
         at oracle.odi.runtime.agent.execution.sql.SQLCommand.getStatement(SQLCommand.java:117)
         at oracle.odi.runtime.agent.execution.sql.SQLCommand.getBatchCommand(SQLCommand.java:329)
         at oracle.odi.runtime.agent.execution.sql.SQLCommand.processRecord(SQLCommand.java:137)
         at oracle.odi.runtime.agent.execution.cmd.TextCommand.processRecord(TextCommand.java:1)
         at oracle.odi.runtime.agent.execution.DataMovementTaskExecutionHandler.handleTask(DataMovementTaskExecutionHandler.java:86)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.processTask(SnpSessTaskSql.java:2913)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java:2625)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatAttachedTasks(SnpSessStep.java:561)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java:464)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java:2093)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$2.doAction(StartSessRequestProcessor.java:366)
         at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:216)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.doProcessStartSessTask(StartSessRequestProcessor.java:300)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.access$0(StartSessRequestProcessor.java:292)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$StartSessTask.doExecute(StartSessRequestProcessor.java:855)
         at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:126)
         at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor$2.run(DefaultAgentTaskExecutor.java:83)
         at java.lang.Thread.run(Thread.java:662)Question2:
    I am calling
    OdiStartScen -SCEN_NAME=ALL_FILES -SCEN_VERSION=001 "-ACTIVITIES.CURRFILENAME=#LOADFILE"
    in ODI procedure and when I execute I am getting this following error two
    OdiStartScen -SCEN_NAME=ALL_FILES -SCEN_VERSION=001 "-ACTIVITIES.CURRFILENAME=#LOADFILE"
    Exception getTargetTable("METADATA_DESC") : ODI-15081: There is no Target TableBoth these errors are happening the same procedure with two commands

    Hello,
    I am getting the same error too. I am just trying to load simple (13 columns all number) txt to oracle table. My interface defination doesn't contain any transformation, filter or join.
    7000 : null : java.sql.SQLException: ODI-40400: Invalid format description
    java.sql.SQLException: ODI-40400: Invalid format description
    at com.sunopsis.jdbc.driver.file.impl.metadata.MetaDataExtractor.buildTableDescFromRequestSQLExceptionOnly(MetaDataExtractor.java:479)
    at com.sunopsis.jdbc.driver.file.FilePreparedStatement.<init>(FilePreparedStatement.java:62)
    at com.sunopsis.jdbc.driver.file.FileConnection.prepareStatement(FileConnection.java:299)
    at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at oracle.odi.core.datasource.dwgobject.support.OnConnectOnDisconnectDataSourceAdapter$OnDisconnectCommandExecutionHandler.invoke(OnConnectOnDisconnectDataSourceAdapter.java:200)
    Source Code:
    select
    CITY_ID
    C1_CITY_ID,
    DISTRICT_ID
    C2_DISTRICT_ID,
    TOWNSHIP_ID
    C3_TOWNSHIP_ID,
    VILLAGE_ID
    C4_VILLAGE_ID,
    QUARTER_ID
    C5_QUARTER_ID,
    STREET_ID
    C6_STREET_ID,
    BUILDING_ID
    C7_BUILDING_ID,
    INDEPENDENTSECTION_ID
    C8_INDEPENDENTSECTION_ID,
    MATCH_LEVEL
    C9_MATCH_LEVEL,
    SERIAL_NUM_SEQ
    C10_SERIAL_NUM_SEQ,
    POLICY_NUM
    C11_POLICY_NUM,
    RENEWAL_NUM
    C12_RENEWAL_NUM,
    ADDRESS_NUM
    C13_ADDRESS_NUM
    from
    TABLE
    /*$$SNPS_START_KEYSNP$CRDWG_TABLESNP$CRTABLE_NAME=ADDRESS_HINT_FLSNP$CRLOAD_FILE=C:/temi/adress_hints.txtSNP$CRFILE_FORMAT=DSNP$CRFILE_SEP_FIELD=0x0009SNP$CRFILE_SEP_LINE=0x000D0x000ASNP$CRFILE_FIRST_ROW=1SNP$CRFILE_ENC_FIELD=SNP$CRFILE_DEC_SEP=SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=CITY_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=1SNP$CRLINE_OFFSET=1SNP$CRLENGTH=3SNP$CRSCALE=0SNP$CRPRECISION=3SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=DISTRICT_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=2SNP$CRLINE_OFFSET=4SNP$CRLENGTH=5SNP$CRSCALE=0SNP$CRPRECISION=5SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=TOWNSHIP_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=3SNP$CRLINE_OFFSET=9SNP$CRLENGTH=5SNP$CRSCALE=0SNP$CRPRECISION=5SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=VILLAGE_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=4SNP$CRLINE_OFFSET=14SNP$CRLENGTH=10SNP$CRSCALE=0SNP$CRPRECISION=10SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=QUARTER_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=5SNP$CRLINE_OFFSET=24SNP$CRLENGTH=10SNP$CRSCALE=0SNP$CRPRECISION=10SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=STREET_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=6SNP$CRLINE_OFFSET=34SNP$CRLENGTH=10SNP$CRSCALE=0SNP$CRPRECISION=10SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=BUILDING_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=7SNP$CRLINE_OFFSET=44SNP$CRLENGTH=15SNP$CRSCALE=0SNP$CRPRECISION=15SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=INDEPENDENTSECTION_IDSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=8SNP$CRLINE_OFFSET=59SNP$CRLENGTH=15SNP$CRSCALE=0SNP$CRPRECISION=15SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=MATCH_LEVELSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=9SNP$CRLINE_OFFSET=74SNP$CRLENGTH=2SNP$CRSCALE=0SNP$CRPRECISION=2SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=SERIAL_NUM_SEQSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=10SNP$CRLINE_OFFSET=76SNP$CRLENGTH=10SNP$CRSCALE=0SNP$CRPRECISION=10SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=POLICY_NUMSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=11SNP$CRLINE_OFFSET=86SNP$CRLENGTH=10SNP$CRSCALE=0SNP$CRPRECISION=10SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=RENEWAL_NUMSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=12SNP$CRLINE_OFFSET=96SNP$CRLENGTH=2SNP$CRSCALE=0SNP$CRPRECISION=2SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=ADDRESS_NUMSNP$CRTYPE_NAME=NUMERICSNP$CRORDER=13SNP$CRLINE_OFFSET=98SNP$CRLENGTH=20SNP$CRSCALE=0SNP$CRPRECISION=20SNP$CR$$SNPS_END_KEY*/
    Target  Code:
    insert into DASK_DWH.C$_0ADDRESS_HINT
      C1_CITY_ID,
      C2_DISTRICT_ID,
      C3_TOWNSHIP_ID,
      C4_VILLAGE_ID,
      C5_QUARTER_ID,
      C6_STREET_ID,
      C7_BUILDING_ID,
      C8_INDEPENDENTSECTION_ID,
      C9_MATCH_LEVEL,
      C10_SERIAL_NUM_SEQ,
      C11_POLICY_NUM,
      C12_RENEWAL_NUM,
      C13_ADDRESS_NUM
    values
      :C1_CITY_ID,
      :C2_DISTRICT_ID,
      :C3_TOWNSHIP_ID,
      :C4_VILLAGE_ID,
      :C5_QUARTER_ID,
      :C6_STREET_ID,
      :C7_BUILDING_ID,
      :C8_INDEPENDENTSECTION_ID,
      :C9_MATCH_LEVEL,
      :C10_SERIAL_NUM_SEQ,
      :C11_POLICY_NUM,
      :C12_RENEWAL_NUM,
      :C13_ADDRESS_NUM

  • Isolation Levels in ODI procedures

    Hi,
    I have a package with 1 interfaces and 2 procedures which I want to configure in as one transactional unit
    The package executes the following sequence
    1. Interface loads data from the source to target table
    2. Procedure updates a statuscode on the source table to S
    3. Procedure updates target table sequence number, but the procedure contains a where clause which filter records to updates
    based on records in the source table with statuscode = S.
    Step 3's execution is dependent on update in step 2. These steps behave as expected and all units tests pass when I
    leave the transaction porperty of the procedures as AutoCommit.
    However I want the interface and packages to be executed as a transcational unit so I configued them as follows.
    The 2 procedures are configured to execute in the same Transaction (Transaction 0) with Commit property as "No Commit".
    I based this on other forum entries.
    With this configuration my unit tests seem to fail, the 3 step does not result in any record being updated.
    I think the issue may be related to the isolation levels on the procedures, so I then configured the procedure's "Transaction Isolation" property to be "Read Uncommited".
    When I ran the test in ODI I got the following error below.
    Can you let me know if what I am trying to do is possible ?. Can you have a number of procedures in a single transactional unit,
    where uncommited changes carried out in the first procedure(not committed), can be read in subsequent steps within that same transactional unit.
    I am current using ODI Repository: Development_ODI_D8B4A_RC5
    Any feedback would be appreciated.
    Thanks,
    Breda
    ODI-1226: Step UPD REVN LSM fails after 1 attempt(s).
    ODI-1232: Procedure UPD REVN LSM execution fails.
    ODI-1228: Task UPD REVN LSM (Procedure) fails on the target ORACLE connection SALES_IMP_DATA_SERVER.
    Caused By: java.sql.SQLException: ODI-10068: SnpsConnection: Isolation level not supported
         at com.sunopsis.sql.SnpsConnection.setTransactionIsolation(SnpsConnection.java:905)
         at com.sunopsis.sql.SnpsConnection.changeIsolationLevel(SnpsConnection.java:329)
         at com.sunopsis.dwg.dbobj.SnpSession.changeIsolationLevel(SnpSession.java:3519)
         at com.sunopsis.dwg.dbobj.SnpSessTask.getDefaultDwgConnectConnection(SnpSessTask.java:518)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.getExecutor(SnpSessTaskSql.java:2936)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.processTask(SnpSessTaskSql.java:2878)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java:2602)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatAttachedTasks(SnpSessStep.java:546)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java:461)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java:1736)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java:1591)
         at oracle.odi.runtime.agent.processor.impl.StartScenRequestProcessor$2.doAction(StartScenRequestProcessor.java:568)
         at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:224)
         at oracle.odi.runtime.agent.processor.impl.StartScenRequestProcessor.doProcessStartScenTask(StartScenRequestProcessor.java:489)
         at oracle.odi.runtime.agent.processor.impl.StartScenRequestProcessor$StartScenTask.doExecute(StartScenRequestProcessor.java:1062)
         at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:118)
         at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor$1.run(DefaultAgentTaskExecutor.java:49)
         at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
         at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor.executeAgentTask(DefaultAgentTaskExecutor.java:41)
         at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.doExecuteAgentTask(TaskExecutorAgentRequestProcessor.java:94)
         at oracle.odi.runtime.agent.processor.TaskExecutorAgentRequestProcessor.process(TaskExecutorAgentRequestProcessor.java:85)
         at oracle.odi.runtime.agent.RuntimeAgent.startScenario(RuntimeAgent.java:700)
         at oracle.odi.runtime.agent.InternalRuntimeAgent.startScenario(InternalRuntimeAgent.java:52)
         at com.sunopsis.dwg.tools.StartScen.startScenOnLocalAgent(StartScen.java:983)
         at com.sunopsis.dwg.tools.StartScen.actionExecute(StartScen.java:245)
         at com.sunopsis.dwg.function.SnpsFunctionBaseRepositoryConnected.execute(SnpsFunctionBaseRepos
    Edited by: user807308 on 14-Jan-2011 01:04
    Edited by: user807308 on 14-Jan-2011 01:04

    Similar issue has been discussed here:
    Re: Transaction rollback...
    Check that out

  • ODI Procedure error log syntax

    hi
    I need to call an odi procedure and an error log needs to be stored on an error table.
    I have created an ODI procedure and in command on source select Oracle as technology and the logical schema
    here I put
    DECLARE
    ODI_VAR VARCHAR2(4000);
    BEGIN
    select ( '<%=odiRef.getPrevStepLog( "MESSAGE" )%>') into ODI_VAR from dual;
    END;
    and in target tab.
    Insert into ERROR_LOG (TASK_NAME,ERROR_DESCRIPTION)
    Values ('test','ODI_VAR');
    AFTER executing I am getting the below error
    900 : 42000 : java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement
    java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:457)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:397)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:389)
         at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:662)
         at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:476)
         at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:204)
         at oracle.jdbc.driver.T4C8Odscrarr.doODNY(T4C8Odscrarr.java:101)
         at oracle.jdbc.driver.T4CPreparedStatement.doDescribe(T4CPreparedStatement.java:848)
         at oracle.jdbc.driver.OracleStatement.describe(OracleStatement.java:5331)
         at oracle.jdbc.driver.OracleResultSetMetaData.<init>(OracleResultSetMetaData.java:58)
         at oracle.jdbc.driver.OracleResultSetImpl.getMetaData(OracleResultSetImpl.java:274)
         at oracle.odi.runtime.agent.execution.sql.concurrent.FastJDBCRecordSet.<init>(FastJDBCRecordSet.java:73)
         at oracle.odi.runtime.agent.execution.sql.SQLDataProvider.readData(SQLDataProvider.java:97)
         at oracle.odi.runtime.agent.execution.sql.SQLDataProvider.readData(SQLDataProvider.java:1)
         at oracle.odi.runtime.agent.execution.DataMovementTaskExecutionHandler.handleTask(DataMovementTaskExecutionHandler.java:67)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.processTask(SnpSessTaskSql.java:2906)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java:2609)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatAttachedTasks(SnpSessStep.java:537)
         at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java:453)
         at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java:1740)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$2.doAction(StartSessRequestProcessor.java:338)
         at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:214)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.doProcessStartSessTask(StartSessRequestProcessor.java:272)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.access$0(StartSessRequestProcessor.java:263)
         at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$StartSessTask.doExecute(StartSessRequestProcessor.java:822)
         at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:123)
         at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor$2.run(DefaultAgentTaskExecutor.java:82)
         at java.lang.Thread.run(Thread.java:662)
    Please help me to resolve this issue.

    Hi,
    Try like this :
    Command on source :
    select ( '<%=odiRef.getPrevStepLog( "MESSAGE" )%>')  ODI_VAR from dual
    Command on target:
    Insert into ERROR_LOG (TASK_NAME,ERROR_DESCRIPTION)
    Values ('test',:ODI_VAR)
    Use the above syntax as it is....it should work..........

  • Error in ODI procedure

    Hi Experts,
    I have created following procedure and triyng to get column value by using rownum. When I run the scenario, I am getting following exception at ODI Procedure step. Can any one please help me on it
    I have created loop package to fetch column value until loop end.
    Please let me know if you are not clear my query
    ODI Procedure:
    begin
    select a.eno into '#EMPNO' from (select rownum r,e.* from trg_emp_01 e) a where a.r=#Counter;
    end;
    #EMPNO variable created as alphanumeric datatype and
    #Counter variable created as alphanumic datatype and it is assign with '1' value
    Exception:
    6550 : 65000 : java.sql.SQLException: ORA-06550: line 1, column 25:
    PLS-00220: simple name required in this context
    ORA-06550: line 1, column 28:
    PL/SQL: ORA-00904: : invalid identifier
    ORA-06550: line 1, column 7:
    PL/SQL: SQL Statement ignored
    java.sql.SQLException: ORA-06550: line 1, column 25:
    PLS-00220: simple name required in this context
    ORA-06550: line 1, column 28:
    PL/SQL: ORA-00904: : invalid identifier
    ORA-06550: line 1, column 7:
    PL/SQL: SQL Statement ignored
         at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:282)
         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:639)
         at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185)
         at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:633)
         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1086)
         at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2984)
         at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3057)
         at com.sunopsis.sql.SnpsQuery.executeUpdate(SnpsQuery.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execSrcOrders(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.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.DwgCommandScenario.treatCommand(DwgCommandScenario.java)
         at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
         at com.sunopsis.dwg.cmd.e.i(e.java)
         at com.sunopsis.dwg.cmd.g.y(g.java)
         at com.sunopsis.dwg.cmd.e.run(e.java)
         at java.lang.Thread.run(Thread.java:595)
    ODI Procedure:
    begin
    select a.eno into #EMPNO from (select rownum r,e.* from trg_emp_01 e) a where a.r=#Counter;
    end;
    Exception:
    6550 : 65000 : java.sql.SQLException: ORA-06550: line 1, column 26:
    PL/SQL: ORA-00936: missing expression
    ORA-06550: line 1, column 7:
    PL/SQL: SQL Statement ignored
    java.sql.SQLException: ORA-06550: line 1, column 26:
    PL/SQL: ORA-00936: missing expression
    ORA-06550: line 1, column 7:
    PL/SQL: SQL Statement ignored
         at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316)
         at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:282)
         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:639)
         at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185)
         at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:633)
         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1086)
         at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2984)
         at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3057)
         at com.sunopsis.sql.SnpsQuery.executeUpdate(SnpsQuery.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execSrcOrders(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
         at com.sunopsis.dwg.dbobj.SnpSessTaskSqlS.treatTaskTrt(SnpSessTaskSqlS.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.DwgCommandScenario.treatCommand(DwgCommandScenario.java)
         at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
         at com.sunopsis.dwg.cmd.e.i(e.java)
         at com.sunopsis.dwg.cmd.g.y(g.java)
         at com.sunopsis.dwg.cmd.e.run(e.java)
         at java.lang.Thread.run(Thread.java:595)
    Thanks
    Phani
    Edited by: Phanikanth on Jul 9, 2010 1:25 AM
    Edited by: Phanikanth on Jul 9, 2010 2:08 AM

    Good point - In my case, these are single executable statements. These have been saved in ODI and executed successfully. Just no using my machine.
    EXAMPLE 1------------
    DECLARE
    RetVal ;
    I_STRING VARCHAR2(200);
    BEGIN
    I_STRING := '';
    RetVal := XXX.PKG_XXX.SF_COMMA_TO_TABLE ( I_STRING );
    COMMIT;
    END;
    EXAMPLE 2------------
    SELECT C.COL1, B.COL2, B.COL3,TO_CHAR(B.EFFDT,'YYYY-MM-DD') COL4,B.COL5,B.COL6
    FROM TABLE1 A, TABLE2 B, TABLE3 C
    WHERE
    and A.ID = 'XXX'
    and a.setcntrlvalue = ' '
    AND A.NAME = 'XXX'
    AND A.EFFDT =
    (SELECT MAX(A_ED.EFFDT) FROM TABLE1 A_ED
    WHERE A.SETID = A_ED.SETID
    AND A_ED.EFFDT <= SYSDATE)
    AND B.EFFDT =
    (SELECT MAX(B_ED.EFFDT) FROM TABLE2 B_ED
    WHERE B.SETID = B_ED.SETID
    AND B.ACCOUNT = B_ED.ACCOUNT
    AND B_ED.EFFDT <= SYSDATE)
    AND A.SETID = B.SETID
    AND A.RANGE_FROM = A.RANGE_TO
    AND B.ACCOUNT = A.RANGE_FROM
    AND A.SETID = C.SETID
    AND A.TREE_NAME = C.TREE_NAME
    AND A.TREE_NODE_NUM = C.TREE_NODE_NUM
    AND C.EFFDT =
    (SELECT MAX(C_ED.EFFDT) FROM TABLE3 C_ED
    WHERE C.SETID = C_ED.SETID
    AND C_ED.EFFDT <= A.EFFDT)
    ------------------

  • How to use Update Statement in ODI Procedure

    Hi,
    How can I use an update statement inside an ODI procedure.
    Thanks

    Hi,
    You do not need the BEGIN and END. ODI procedures are free text, so you can simply write your update statement, as you would in toad/sql developer etc etc. Just make sure you set the Technology and the logical schema. It is how ever best practice to also use the API:
    <%=odiRef.getSchemaName("YOUR_LOGICAL_SCHEMA_NAME", "D")%>. to prefix tables. This way, you select data from different schema's in the same instance (as long a your user has the correct privs).
    Cheers
    Bos
    Edited by: Bos on Jun 22, 2011 3:09 PM

  • Using generic format for database links in ODI Procedures

    Hi,
    As in procedure we use
    create table <%=odiRef.getSchemaName("Target Schema","D")%>.TABLE2 as
    select * from <%=odiRef.getSchemaName("Staging Schema","D")%>.TABLE1
    where Staging Database and Target Database are logical schemas which will associate to respective physical schema while execution so the above statement will become as
    create table Target_Schema.TABLE2 as
    select * from staging_Schema.TABLE1
    I just wanted to know if there is any way by which i can apply samethings for Database Links also.
    Like if i have statements
    create table TABLE2@Target_Database as
    select * from TABLE1@staging_Database
    can i replace DB links like Target_Database and Staging_Database?
    Help would be appreciated. :)
    Thanks,
    Mahesh

    I am not entirely sure about the exact requirement.
    Any way ..
    1.
    create 2 variable .
    v_get_src_schema : select '<%=odiRef.getSchemaName("<your_src_logical_schema>","D")%>' from dual
    v_get_tgt_schema : select '<%=odiRef.getSchemaName("<your_tgt_logical_schema>","D")%>' from dual
    2.
    2 more variable to get the required DBLink
    v_SRC_DB_LINK: select DB_LINK from all_db_links where owner='#PRJ_CODE.v_get_src_schema'
    v_TGT_DB_LINK: select DB_LINK from all_db_links where owner='#PRJ_CODE.v_get_tgt_schema'
    3.
    create a procedure :
    prc_create_table :
    create table <%=odiRef.getSchemaName("Target Schema","D")%>.TABLE2@'#PRJ_CODE.v_TGT_DB_LINK' as
    select * from <%=odiRef.getSchemaName("Staging Schema","D")%>.TABLE1@'#PRJ_CODE.v_SRC_DB_LINK'
    4.
    Create a package :
    Connect all the steps in serial with OK line.
    Execute and let us know what is the out come .
    Thanks,
    Sutirtha

  • ODI Scenario Hang on ODI Procedure

    Hi Experts,
    We have one ODI scenario which consists of a few ODI procedure steps with anonymous PL/SQL block. When one procedure takes a long time to process data (>60min. when data volume is large), the ODI scenario hangs intermittently on the procedure (ODI Operator shows Running state and no progress to next step in Scenario). The pl/sql script finished fine when running against database directly processing the same dataset.
    When the ODI step hangs, the database side where the pl/sql runs on has no more activities, and the db session(v$session) which processes the ODI procedure goes away as well (db session not existing on db anymore). But the ODI Operator still shows the step in running state and hangs there forever (days). The jdbc connection from ODI to db looks fine.
    How can we fix this problem in ODI? The ODI version is 10.1.3.5.
    Appreciate your input on this.
    Thanks,

    The doc said "If your command is being executed in a transaction (numbered 0 to 9)" then I should set 'Commit'. But I used 'Autocommit' for transaction, is the 'Commit' necessary here?
    Thanks!

  • SQL Override. How to use custom SQL in ODI?

    I am new to ODI & have an Informatica background. I am looking for an SQL override capability in ODI. I have an existing SQL which has complex joins, in-line queries, filters, unions & many other complexities. The query reads many existing tables & output 5 fields, which I need to populate in the target table. In Informatica, I would simply create a Target table of these 5 fields, import the same table as both source & target, & then override the source qualifier with the existing SQL. Does ODI have a similar feature?
    I know that the same can be achieved using core ODI features, but I am trying to get it done quickly without re-inventing the wheels.
    Thanks,
    Dinesh.

    Dinesh
    you can not use SQL over-ride feature which informatica has. I am an informatica developer myself. So I can feel your pain. You are gonna miss a lot of features Informatica has. the one you are looking can not be done using ODI Interfaces. But can be done using ODI Procedures. When you create a step in Procedure you would mention the Source and target schema informations/Context Logical Schema info which should do the work for you. If your source and targets are in different Server then create a DBlink between two servers. Now when you put your select query in it put it like an insert query.

  • Executing Java Code in ODI Procedure

    Hi All,
    I have following  java code which i need to write on ODI procedure but i am not sure which technology to chose (Jython,Sunopsis API or Java BeanShell).
    I tried to execute the procedure Jyhton with <% "Java code"%> but getting the error.Any boddy can suggest where i doing wrong.
    <%
    import javax.naming.Context;
    import javax.naming.NamingEnumeration;
    import javax.naming.directory.*;
    import java.util.Hashtable;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    String userName = "HXXXXXX";
    String CN1=null;
    String Dis_Name=null;
    String Mem_of=null;
    String Mail=null;
    String SGID=null;
    File file = new File("C:/Project/ODI/LDAPID.txt");
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "LDAP://XX.if.YYYY.net:389/OU=XYZ,DC=ZZ,DC=if,DC=XYZ,DC=COM");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, new String("" + "\\" + userName));
    env.put(Context.SECURITY_CREDENTIALS, "");
    DirContext ctx = null;
    NamingEnumeration results = null;
    ctx = new InitialDirContext(env);
    SearchControls controls = new SearchControls();
    controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    results = ctx.search("", "(objectclass=person)", controls);
    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);
       while (results.hasMore())
             SearchResult searchResult = (SearchResult) results.next();
             Attributes attributes = searchResult.getAttributes();
             Attribute attr = attributes.get("cn");
             String cn = (String) attr.get();
             CN1=(String.valueOf(attributes.get("cn")));
             Dis_Name=(String.valueOf(attributes.get("displayName")));
             SGID=(String.valueOf(attributes.get("userPrincipalName")));
             Mem_of=(String.valueOf(attributes.get("memberOf")));
             Mail=(String.valueOf(attributes.get("mail")));
             bw.write(CN1 + " || " + Dis_Name + " || " + SGID + " || " + Mail);
             bw.newLine();
    bw.close();
    results.close();
    ctx.close();
    %>
    I am getting following error.
    The application script threw an exception: java.lang.NullPointerException BSF info: CODE_JAVA at line: 0 column: columnNo
    Please suggest what went wrong with the code.
    Thanks
    Regards

    In Jython you don not need to declare the type so String userName = "HXXXXXX"; should simply read userName = "HXXXXXX" . Lots of your code need to be rewritten to work with Jython if you choose that as your technology.

  • Transaction tab in ODI Procedure

    Hi Experts,
    Can anyone help me on what and how exactly the Transaction tab in the ODI Procedure step works? Thanks!
    Warm Regards,
    VBV

    Hi,
    I take you mean the Transaction drop box on a procedure step?
    This you can use to isolate transactions within the session, and commit at the end. For an example, if you want to load data from various sources into a table, you can set the Transaction for each procedure step to the same transaction isolation value, with the 'Commit' as 'No commit' and when all data is loaded into the table, have a commit step in your procedure to commit that specific transaction. If for some reason a step fails, then no data within that transaction will be committed to the database.
    Its the same as using SQL Developer and having auto commit turned off. You have to manually commit to the database if you want to see the data changes in another session, or you can Role Back your changes within the session if you do not want to commit them.
    Have a look at the IKM 'IKM Oracle Incremental Update' - this uses Transaction 1 on the following steps, both have a specified 'No Commit':
    'update existing rows'
    'Insert new rows',
    then has a specific commit step afterwards.
    Hope this helps.
    Cheers
    Bos

Maybe you are looking for