How to implement a CURSOR & looping inside ODI 11g Procedure

Hello All,
I have requirement where in my source data has multiple rows for an Item number with different Product numbers, I have to concatenate all the Product Numbers of speciifc Item number and update it into another column on the same table. How can we achive this inside ODI 11g? Can we use ODI Procedure? Can we implement a Cursor inside the ODI procedure to group the records based on Item Number and use a loop to concatenate as we do it inside a normal PL SQL procedure, if so, please let me know?
Ex source:
Column1,Column2, Column3
Item01, Product01, null
Item01, Product02, null
Item01, Product03, null
Item02, Product01, null
Item02, Product08, null
need to convert/update this source data to
Column1,Column2, Column3
Item01, Product01, Product01 Product02 Product03
Item01, Product02, Product01 Product02 Product03
Item01, Product03, Product01 Product02 Product03
Item02, Product01, Product01 Product08
Item02, Product08, Product01 Product08
Regards,
MRM

Hi Thanks for the reply,
I replaced the code for column3 mapping to
CASE WHEN POC_DECODE.SOURCE IS NOT NULL THEN
SELECT LISTAGG(POC_DECODE.TARGET,'')
WITHIN GROUP ( ORDER BY POC_DECODE.SOURCE)
FROM TABLE POC_DECODE A WHERE A.SOURCE=POC_DECODE.SOURCE
END
I get the below error:
ODI-1228: Task TEST_POC_CONCATE (Integration) fails on the target ORACLE connection ORACLE_ORMS_DS.
Caused By: java.sql.SQLSyntaxErrorException: ORA-00923: FROM keyword not found where expected
     at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91)
     at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
     at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1035)
     at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
     at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:953)
     at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1224)
     at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3386)
     at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3467)
     at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
     at com.sunopsis.sql.SnpsQuery.executeUpdate(SnpsQuery.java:665)
     at com.sunopsis.dwg.dbobj.SnpSessTaskSql.executeUpdate(SnpSessTaskSql.java:3218)
     at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execStdOrders(SnpSessTaskSql.java:1785)
     at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java:2805)
     at com.sunopsis.dwg.dbobj.SnpSessTaskSqlI.treatTaskTrt(SnpSessTaskSqlI.java:68)
     at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java:2515)
     at com.sunopsis.dwg.dbobj.SnpSessStep.treatAttachedTasks(SnpSessStep.java:534)
     at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java:449)
     at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java:1954)
     at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$2.doAction(StartSessRequestProcessor.java:322)
     at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:224)
     at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.doProcessStartSessTask(StartSessRequestProcessor.java:246)
     at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.access$0(StartSessRequestProcessor.java:237)
     at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$StartSessTask.doExecute(StartSessRequestProcessor.java:794)
     at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:114)
     at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor$2.run(DefaultAgentTaskExecutor.java:82)
     at java.lang.Thread.run(Thread.java:619)
Please help...

Similar Messages

  • How to shutdown and start agent in ODI 11g in Linux Environment

    Hi Experts,
    Pls any one can help me on "How to shutdown and start agent in ODI 11g in Linux Environment" and where can I find Agent.sh and Agentshutdown.sh files location in ODI 11g and parallely how can I find Odiparameter.sh file location
    Thanks in Advance
    Regards
    Phani

    Phani ,
    Go to your <ODI_11g_HOME>/oracledi/agent/bin
    and you will find agent.sh , agent_<standalone_agent>.sh and odiparams.sh and other agent files.
    Step 1. Update your odiparams.sh
    Step 2. Create the Physical and Logical Agent int your Topology using the same port_number and name provide while creating the Stand alone agent during installation ( or) create accordingly the agent in Topology with name and port number as required and make the modification in agent_<stand_alone>.sh file
    Step 3. After doing so start your agent_<stand_alone>.sh
    Step 4. Repeat the process 2-3 for any number of stand alone agent created on different ports and steps 1 to 3 for different Work repository
    Thanks
    Dev

  • How to implement SCD type 2 in OWB 11g

    Hi all,
    I would like to know that how to implement SCD type 2 in OWB 11g.
    Actually I have tried to implement it but the target table which contains the effective_date and expiration_date are null after running the mapping.
    I have set the effective date and expiration date settings in the SCD tab of dimension object.
    Kindly help me the same if anyone knows.
    Kind regards,
    shikha

    You were able to get OWB11g to move data?
    Are you running on a 64-bit windows server? I could not get it to do a basic data move on this type of server install.

  • How to run the cursor loop once even if it is true for many times - urgent

    Hi,
    Say
    loop
    tdate='12-JAN-2005'
    loop
    cursor.......
    if '10-JAN-2005'<=tdate then
    fetch
    end loop
    tdate=tdate+1 month
    end loop;
    in the above query i want my cursor to run the loop only once at the first true of my condition....in the second run the tdate will be = '12-FEB-2005'....but my cursor loop should not go in..it has to comeout....
    how to do this....plz help very urgent

    in the above query i want my cursor to run the loop only once at the first true of
    my condition....in the second run the tdate will be = '12-FEB-2005'....but my
    cursor loop should not go in..it has to comeout....Simply control has been the cursor processed or not.
    Something like that
    SQL> declare
      2    tdate date := to_date('12-JAN-2005','DD-MON-YYYY');
      3    cursor cr is select * from dual;
      4    rt dual%rowtype;
      5    cursor_has_been_processed boolean := false;
      6  begin
      7   loop
      8     if to_date('10-JAN-2005','DD-MON-YYYY') <=tdate then
      9             if not cursor_has_been_processed then
    10                     open cr;
    11                     loop
    12                     fetch cr into rt;
    13                     exit when cr%notfound;
    14                     end loop;
    15                     close cr;
    16                     cursor_has_been_processed := true;
    17                     dbms_output.put_line('Cursor has been processed');
    18             end if;
    19     --DO something
    20     null;
    21          end if;
    22     dbms_output.put_line(tdate);
    23     tdate := add_months(tdate,1);
    24     exit when tdate >= to_date('12-MAY-2005','DD-MON-YYYY');
    25   end loop;
    26  end;
    27  /
    Cursor has been processed
    12-JAN-05
    12-FEB-05
    12-MAR-05
    12-APR-05
    PL/SQL procedure successfully completed.Rgds.

  • How can I set cursor position inside TextInput or TextArea

    Hallo.. I can't find the way for changing che cursor position inside a String in the TextInput or TextArea Component.. I hope you can help me..
    Thx
    Max

    setSelection(index, index);

  • How to implement multi-source XSLT mapping in 11g PS3 BPEL  ?

    Hi
    How to implement multi-source (single destination) XSLT mapping in 11g PS3 BPEL ? Is there any good example step by step ?
    thx
    d

    Hi d,
    Also there's a sample available at samplecode.oracle.com mapper-105-multiple-sources.zip.
    Regards,
    Neeraj Sehgal

  • How Create a Global Temporary Table inside a Stored Procedure?

    Hi...
    I need to create a Global Temporary Table inside a Stored
    Procedure....
    I have no idea how to do that....
    Please....if u can send me a sample, send to me....
    Thanks a lot

    there are many ways to do this..
    one u can use dbms_utility package to run ddl statements like
    for ex:
    declare
    t varchar2(200):='order_no';
    v number;
    begin
    --dbms_utility.exec_ddl_statement('select '||t||' into '||v||'
    from
    --ordermaster where rownum=1');
    dbms_utility.exec_ddl_statement('create table cvt(t number)');
    dbms_output.put_line(v);
    end;
    but the actual method(recommended) involves a bit coding using
    dbms_sql package you will find examples on technet or metalink
    to use this package..
    I hope this helps
    Narendra

  • How can I use a Looper inside a Repeat Region?

    I have a Dreamweaver standard Repeat Region applied to a HTML table containing two horizontal loopers. The HTML table is to display a list of company contacts for our members. The loopers display find for the first company but after that they stop. To key the loopers to the company Im using a trick mentioned by Günter Schenk in this thread: http://www.adobeforums.com/webx/.59b524b4/5. He calls it a sub query; at times I use to help myself by using some sort of "sub query" like the following
    <br />
    <br />Ive linked my looper recordset to the recordset used for the Repeat Region. Heres one of the looper queries:
    <br />
    <br />$KTColParam1_rsContactFeatures = "-1";
    <br />if (isset($_SESSION["kt_login_id"])) {
    <br />$KTColParam1_rsContactFeatures = $_SESSION["kt_login_id"];
    <br />}
    <br />mysql_select_db($database_RNW, $RNW);
    <br />$query_rsContactFeatures = sprintf("SELECT DISTINCT list_feature.description_feature, company.id_company, contact_cnt.idpremissions_cnt FROM (((company LEFT JOIN company_to_feature ON company_to_feature.idcompany=company.id_company) RIGHT JOIN list_feature ON list_feature.id_list_feature=company_to_feature.idlistfeature) LEFT JOIN contact_cnt ON contact_cnt.idcompany_cnt=company.id_company) WHERE company.id_company='".$row_rsContactAll['id_company']."' AND company_to_feature.id_feature is not null AND contact_cnt.idpremissions_cnt=%s ORDER BY company.id_company ASC ", GetSQLValueString($KTColParam1_rsContactFeatures, "int"));
    <br />$rsContactFeatures = mysql_query($query_rsContactFeatures, $RNW) or die(mysql_error());
    <br />$row_rsContactFeatures = mysql_fetch_assoc($rsContactFeatures);
    <br />$totalRows_rsContactFeatures = mysql_num_rows($rsContactFeatures);
    <br />
    <br />This is my link in both quires: WHERE company.id_company='".$row_rsContactAll['id_company']."'
    <br />
    <br />Heres the code for the connected looper:
    <br />
    <br /><?php<br />do { // horizontal looper version 3<br />?>
    <br />
    <br />
    <br />
    <br />
    <br />As I said this works fine for the first item in the list but then it quits. Heres a screen shot of what I dont want: http://www.retirenw.com/images/help/looper_inside_repeat_region.gif
    <br />
    <br />Is there anyway to change the php for the loopers to make this work?
    <br />
    <br />Thanks for your help
    <table>
    <tr>
    <td>
    <img src="../images/bullet.gif" width="8" height="14" />
    </td>
    <td>
    <?php echo $row_rsContactFeatures['description_feature']; ?>
    </td><?php <br />$row_rsContactFeatures = mysql_fetch_assoc($rsContactFeatures);<br />if (!isset($nested_rsContactFeatures)) { <br />$nested_rsContactFeatures= 1;<br />}<br />if (isset($row_rsContactFeatures) && is_array($row_rsContactFeatures) && $nested_rsContactFeatures++ % 1==0) {<br />echo "</tr><tr>";<br />}<br />} while ($row_rsContactFeatures); //end horizontal looper version 3<br />?>
    </tr>
    </table>

    I found an easy solution.
    I moved my looper quires out of my head and into my bodyinside the repeat region (the Looper Wizard puts the quires in the head). I put the quires right before my looper code. Finally, I had to make sure my conditional regional code came after the looper quires but before the looper code.

  • How to use equals in loop of an Stored Procedure

    Hi ,
    This is my Stored Procedure which is working fine (mean displaying all the Data from the Table)
    Here i want to add this functionality that is i want to check if there is 'IND' in country_code , i want to throw an Exception manually .
    I am struck up here : After the cursor fetches all the country_code in its loop , how can i check the whether country_code contains 'IND' or not in it ??
    create or replace PROCEDURE Auto_After_Bod_Status
    is
    country_code    VARCHAR2(40);
    myException EXCEPTION ;
    CURSOR PD1
    IS
    SELECT COUNTRY_CODE FROM LINK_STATUS;
    BEGIN
    OPEN PD1;
    LOOP
    FETCH PD1 INTO country_code;
    DBMS_OUTPUT.PUT_LINE(country_code);
    EXIT WHEN PD1%NOTFOUND;
    END LOOP;
    CLOSE PD1;
    END  Auto_After_Bod_Status;
    please help .Thanks .

    user10503747 wrote:
    I am struck up here : After the cursor fetches all the country_code in its loop , how can i check the whether country_code contains 'IND' or not in it ??Why do you need to check it after the loop. Check as soon as row is fetched. Also, your DBMS_OUTPUT.PUT_LINE(country_code); should be after EXIT WHEN PD1%NOTFOUND; not before:
    create or replace PROCEDURE Auto_After_Bod_Status
    is
    country_code VARCHAR2(40);
    myException EXCEPTION ;
    CURSOR PD1
    IS
    SELECT COUNTRY_CODE FROM LINK_STATUS;
    BEGIN
    OPEN PD1;
    LOOP
    FETCH PD1 INTO country_code;
    EXIT WHEN PD1%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(country_code);
    IF country_code LIKE '%IND%'
      THEN close pd1;
           raise myException;
    END IF;
    END LOOP;
    CLOSE PD1;
    END Auto_After_Bod_Status;But if you want to fetch all rows first:
    create or replace PROCEDURE Auto_After_Bod_Status
    is
    country_code VARCHAR2(40);
    ind number := 0;
    myException EXCEPTION ;
    CURSOR PD1
    IS
    SELECT COUNTRY_CODE FROM LINK_STATUS;
    BEGIN
    OPEN PD1;
    LOOP
    FETCH PD1 INTO country_code;
    EXIT WHEN PD1%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(country_code);
    IF country_code LIKE '%IND%'
      THEN ind := 1;
    END IF;
    END LOOP;
    CLOSE PD1;
    IF ind = 1
      THEN raise myException;
    END IF;
    END Auto_After_Bod_Status;SY.

  • How to check the id assigned to ODI 11g repository

    Dear All,
    I would like to know how to check what unique id has been assigned to master and work repository.
    I tried to check the repoisitory property window but it does not show it id.
    Is there any way to check assigned id to master and work repository?
    And if I want to chenge the id assigned, how to change it?
    Many thanks
    Santy

    Hi,
    in topology manager-> repository-> double click on repository-> properties.
    To renumber a repository simply right click on it...
    Here the documentation
    http://docs.oracle.com/cd/E21764_01/integrate.1111/e12643/admin_reps.htm#CIHIAIFB

  • How to retrieve work repository password in ODI 11g

    Hi,
    I have forgot my work repository password and unable to login.
    Please let me know if anyone come across similar situation and retrieve password. I tried change password option but it's asking first old password.
    Thanks,
    Nish

    Phani ,
    Go to your <ODI_11g_HOME>/oracledi/agent/bin
    and you will find agent.sh , agent_<standalone_agent>.sh and odiparams.sh and other agent files.
    Step 1. Update your odiparams.sh
    Step 2. Create the Physical and Logical Agent int your Topology using the same port_number and name provide while creating the Stand alone agent during installation ( or) create accordingly the agent in Topology with name and port number as required and make the modification in agent_<stand_alone>.sh file
    Step 3. After doing so start your agent_<stand_alone>.sh
    Step 4. Repeat the process 2-3 for any number of stand alone agent created on different ports and steps 1 to 3 for different Work repository
    Thanks
    Dev

  • Run for loop inside event node

    Hi all, 
              We want to run for loop inside event node with 50ms delay. But when i am doing it the Labview is crashing. Please let me know if somebody did this.
    Thanks in advance,
    Regards,
    Harish. G
    Thanks & Regards,
    Harish. G.

    harishg92 wrote:
    Hi all, 
              We want to run for loop inside event node with 50ms delay. But when i am doing it the Labview is crashing. Please let me know if somebody did this.
    Thanks in advance,
    Regards,
    Harish. G
    You're implementing a For loop inside an event structure? (I don't know of any event "node" in which you can run a For loop)
    If so, that's a bad idea because LabVIEW won't be able to process any events while waiting for your For loop to get done, which might be why its crashing.
    There are tricks to accomplishing what you're trying to do without putting any for loops inside event structure. See what I have  attached and if it helps. "N" is number of times you run your For loop, timeout is whatever delay you want in each loop. This can be done in many ways without adding delays in events, another way could be to fire a separate subVI using Asynchronous call (without waiting for the VI to finish) during those delays, just make sure that such subVI finishes processing within your allocated time (that's how I'd ideally implement things). That method is better because you're doing minimal work inside events structure while using wait period wisely in a separate/parallel process.
    I hope that I understood you correctly and did not go off on a tangent.
    -BTC
    New Controls & Indicators made using vector graphics & animations? Click below for Pebbles UI
    Attachments:
    ForLoop inside Event Structure.vi ‏11 KB

  • How to override the event loop

    As a windows game developer, I have always overridden the application message loop to make sure that graphics were rendered when the CPU was idle, and still being able to process windows messages like keyboard/mouse events. CPU is then maxed out (except when a forced sleep or v-sync is enabled) to give highest performance on graphics, making a simple clear opengl window render at 3500 frames per second (I know this is idiotic but I'm trying to make a point).
    Now that I'm porting my game engine (c++ code) to cocoa, I  am struggling with how to implement the main loop. I could use a timer but this will fix the framerate and might be slow. It will prevent me to use the CPU to its full extent.
    So: is there some kind of OnIdle event I can override? Or do I have to do the Event loop processing myself? And can anyone tell me how to do something like this? Is there a tutorial or a book or anything I can study to learn about this? I presume this is lower level API.
    Any help is appreciated!
    Dirk.

    etresoft wrote:
    Michael may profess ignorance about MacOS X applications, but he is still 100% correct. You need to study the architecture and find the best way to work with it. The first thing to know is that the CPU is irrelevant. Let the GPU handle your graphics - that is what it does best. You do want your CPU to be as idle as possible. Approach it from a device-driver or event-driven perspective.
    Just to clarify that I'm not a total noob trying to write his first program: of course I will not overly use the CPU if not necessary. I completely agree with what you guys say about maximizing CPU usage. My game engine on windows will put the CPU to sleep when it's not necessary making my engine perform very good with almost no CPU usage.
    But... when I want to test if changes to my engine/shaders/... improve or degrade performance of the renderings, I want to be sure that everything is maxed out so that I can be sure that the difference is correct. On maxed out CPU/GPU, I will notice the difference when framerate goes for example from 2000 to 1900 while this will not be visible when just at 60 fps and a lot of free time. I will see 60 fps even when my code is worse. That's why I need to be able to test this.
    Anyway, as I said, I completely agree and I will certainly do my very best to make sure that CPU is not overly used. So my question remains: how can I make sure that I have everything I need at the time I need it while I will do my best to make sure nothing more is used?
    Timer-events at 1/60th of a second is not the answer...
    Using threads for these things is not the answer... I use them for other things (loading from disk/processing data/generating data)
    But are there other options?
    Can you point me to where I can learn more about the architecture and its possibilities?

  • How to implement Custom Authentication and Authorization in Oracle SOA 11g

    Can anyone please tell me, how to implement Custom Authentication in Oracle SOA 11g ?
    Because in Oracle SOA 10.1.3.4 , i have implemented this custom authentication and authorization by implementing BPMAuthenticationService, BPMAuthorizationService, BPMIdentityService to verify againt my database systems.
    implementation classes like the mentioned below
    1).
    public class SampleAuthenticationService extends SampleServiceBase implements BPMAuthenticationService {
    2).
    public class SampleAuthorizationService extends SampleServiceBase implements BPMAuthorizationService {
    3).
    public class SampleIdentityService extends SampleServiceBase implements BPMIdentityService {
    Please help me to implement the authentication and authorization in Oracle SOA 11g .
    thanks in advance

    To start with please go through following document
    http://docs.oracle.com/cd/E21764_01/integration.1111/e10231/adptr_jms.htm
    http://docs.oracle.com/cd/E23943_01/integration.1111/e10231/adptr_file.htm
    Regards
    Arpit

  • ODI 11g SCD@ IKM is not updating End Time and Flag

    I am implementing this IKM from Oracle ODI 11g and after executing it inserts a new row/dimension [which is correct] but sets the flag indicator for old and new ros both to '1' and Ending Timestamp value is not set for old row [I was expecting the ending timestamp will be updated ot todays timestamp but not happening]. I follwed all the steps mentioend in SCD2 [in this forum] and made the column behaviour to appropirate SCD Behavior. I do not have any "Update Row on change" but all the details are "Add row on change" apart from Starting Timestamp, ending timestamp and Current Indicator flag.
    Can any one help me with this issue? Please let me know what details you need to debug or make analyze it.
    Thank you and appreciate in advance for your help

    I guess that is correct. 'historize old rows' was missing in my SCD2 [I have copied it from Oracle SCD2 and might have removed that command [??] But after your response, I checked and used the original SCD2 and it's working after fixing few issues with End Date in my data. Thanks .
    'Mav (watch TopGun?)' ofcourse Yeah!!

Maybe you are looking for