loop through XML

I have the below XML and i want to loop through this XML and put the value in an array

<Subproductdetails>
  <Subproduct id="1" name="AA" /> 
  <Subproduct id="2" name="BB" /> 
</Subproductdetails>
say, I declare a number table num_arr, I want the num_arr to be filled with id: 1 and 2.
is someone can please show me how this is done in pl/sql

Thank you.

Hello

If you have 10.2 or higher, try this:

DECLARE

 TYPE num_arr_type IS TABLE OF NUMBER;
 num_arr num_arr_type;

 v_xml xmltype := xmltype('
  
  

');

BEGIN

 SELECT id
 BULK COLLECT INTO num_arr
 FROM XMLTable(
  '/Subproductdetails/Subproduct'
  passing v_xml
  columns id number path '@id'
 );

END;
/

For versions prior to 10.2 (and with the support of xmltype), use the following SELECT statement instead:

SELECT extractvalue(column_value, 'Subproduct/@id')
BULK COLLECT INTO num_arr
FROM Table(
  XMLSequence(
    Extract(v_xml, '/Subproductdetails/Subproduct')
  )
);

Tags: Database

Similar Questions

  • Looping through xml in cfscript

    OK, I can loop through xml to get the value of the label and output to a variable. But the problem for me becomes the child tags of a specific loop grouped tag. For example, below, I want to bring together the xml like this.

    Year: 90
    Employer: Bank
    Wages: 2000.00

    Year: 90
    Employer: gas station
    Wages: 1000.00

    OK, I can loop through xml to get the value of the label and output to a variable. But the problem for me becomes the child tags of a specific loop grouped tag. For example, below, I want to bring together the xml like this.

    Year: 91
    Employer: Bank
    Wages: 2500.00

    Year: 91
    Employer: gas station
    Wages: 1500.00


    < year value = "90" >
    < name of employer 'Bank' = >
    < > 2000.00 salaries < / wages >
    < / employer >
    < name of employer 'gas station' = >
    < > 1000.00 salaries < / wages >
    < / employer >
    < / year >

    < year value = "91" >
    < name of employer 'Bank' = >
    < > 2500.00 salaries < / wages >
    < / employer >
    < name of employer 'gas station' = >
    < > 1500.00 salaries < / wages >
    < / employer >
    < / year >

    Thanks in advance,

    Anthony

    This might be easier with a query. Create one with QueryNew() and fill it when you browse the XML. Then use Q of Q to sort by employer, then the year. You can now use the cfoutput group attribute to group by the employer.

  • How do multiple loops through XML in PL/SQL

    My XML looks like this:

    <data>

       <row>

         <id>1</id>

         <name>John</name>

         <name>Jack</name>

       </row>

       <row>

         <id>2</id>

         <name>Scott</name>

         <name>Chuck</name>

         <name>Kim</name>

       </row>

    </data>


    I would like to output:

       ->1

       -->John

       -->Jack

       ->2

       -->Scott

       -->Chuck

       -->Kim



    My current code looks like this:

    < code >

    DECLARE

    XMLType X: = XMLTYPE ("<?") XML version = "1.0"? >

    < data >

    < row >

    < id > 1 < /ID >

    < name > John < / name >

    < name > Jack < / name >

    < / row >

    < row >

    < code > < /ID > 2

    < name > Scott < / name >

    < name > Chuck < / name >

    < name > Kim < / name >

    < / row >

    (< / data > ');

    BEGIN

    FOR R IN (SELECT EXTRACTVALUE (VALUE (P), ' /row/id/text ()') ID

    OF TABLE (XMLSEQUENCE (EXCERPT of (X, ' / / data/row '))) P)

    LOOP

    DBMS_OUTPUT. Put_line ('-->' |) R.ID);

    END LOOP;

    END;

    < code >

    I would need a loop more inside a line to make a loop on the name tag, but I don't know how to do it.

    A little help would be appreciated.

    I thought about it myself. Here is the code:

    DECLARE

    XMLTYPE X: = XMLTYPE (')

    1

    John

    Jack

    2

    Scott

    Chuck

    Kim

    ');

    BEGIN

    FOR R IN (SELECT EXTRACTVALUE (VALUE (P), '/row' / id/text ()) AS ID,

    Extract (value (P), "/ line / promises") AS PROMET

    OF TABLE (XMLSEQUENCE (EXCERPT of (X, ' / / data/row '))) P)

    LOOP

    DBMS_OUTPUT. PUT_LINE ('-->' |) R.ID);

    FOR R1 IN (SELECT EXTRACTVALUE (VALUE (T1), '/ name/text ()') AS NAME

    OF TABLE (XMLSEQUENCE (EXTRACT (R.PROMET, ' promises / name '))) T1)

    LOOP

    DBMS_OUTPUT. PUT_LINE ('-->' |) R1.NAME);

    END LOOP;

    END LOOP;

    END;

  • Looping through xml

    This is the situation. I'm parsing xml and implementation in a cfquery.

    This is the basic structure of the xml

    < year account = 1 value = 90 >
    < tag1 > 300 < / tag1 >
    < > 400 tag2 < / tag2 >
    < / year >

    < value year = 91 >
    < tag1 > 100 < / tag1 >
    < > 200 tag2 < / tag2 >
    < / year >

    < value year = 92 >
    < tag1 > 500 < / tag1 >
    < / year >

    Tag1 will exist always and only sometimes Tag2

    I'm a loop in the XML and put in a request that looks a lot like this.

    Year Tag1 Tag2

    How do I detect if tag2 exists under each year tag can insert the value in the query or put zero in the request when there is no?

    Thanks in advance.

    Have you tried StructKeyExists(). It seems to work with 7.0.2
    ...


    There are

    Not exist

  • loop through XML (file) doc

    Hi all


    I'm looking for a code to browse XML file
    line by line if I can handle the errors on a line-by-line

    I'm looking for code that also runs on oracle 10 g XE!


    I'm new to XML...


    KR
    Martin

    Martijnke wrote:
    Hi all

    I'm looking for a code to browse XML file
    line by line if I can handle the errors on a line-by-line

    I'm looking for code that also runs on oracle 10 g XE!

    I'm new to XML...

    KR
    Martin

    Strictly speaking, XML files is not 'lines', they have elements.

    Sounds like you want to use the DBMS_XMLDOM package to process the XML nodes.

    http://download.Oracle.com/docs/CD/B19306_01/AppDev.102/b14258/d_xmldom.htm#ARPLS399

  • loops through the sections XML &lt; RecieptDetails &gt; and for each record found...

    My input XML file is...
    I get this XML using file adapter...

    <? XML version = "1.0" encoding = "UTF-8"? >
    -< root xmlns:ns2 = "http://www.w3.org/2001/XMLSchema" >
    -< ns2:ReceiptBatch >
    < ns2:FileID > "99999" < / ns2:FileID >
    < ns2:Warehouse > in THE < / ns2:Warehouse >
    'L' < ns2:Revision > < / ns2:Revision >
    < ns2:DocID > A4 < / ns2:DocID >
    -< ns2:Receipt >
    < ns2:DeliveryNo > 123 - OP < / ns2:DeliveryNo >
    < ns2:ProcessDate > 112138 < / ns2:ProcessDate >
    < ns2:ContainerNo > 98765 < / ns2:ContainerNo >
    < ns2:Instructions > TREKAU < / ns2:Instructions >
    < ns2:ReceiptType > 1 < / ns2:ReceiptType >
    < ns2:SuppCustCode > 111 < / ns2:SuppCustCode >
    TREK-Cycle < ns2:SuppCustName > < / ns2:SuppCustName >
    -< ns2:ReceiptDetails >
    < ns2:Line > 1 < / ns2:Line >
    < ns2:ProductCode > 1000 < / ns2:ProductCode >
    < ns2:QuantityAdvised > 1 < / ns2:QuantityAdvised >
    < ns2:QuantityReceived > 1 < / ns2:QuantityReceived >
    < / ns2:ReceiptDetails >
    -< ns2:ReceiptDetails >
    < ns2:Line > 2 < / ns2:Line >
    < ns2:ProductCode > 2000 < / ns2:ProductCode >
    < ns2:QuantityAdvised > 2 < / ns2:QuantityAdvised >
    < ns2:QuantityReceived > 2 < / ns2:QuantityReceived >
    < / ns2:ReceiptDetails >
    -< ns2:ReceiptDetails >
    < ns2:Line > 3 < / ns2:Line >
    < ns2:ProductCode > 2000 < / ns2:ProductCode >
    < ns2:QuantityAdvised > 3 < / ns2:QuantityAdvised >
    < ns2:QuantityReceived > 3 < / ns2:QuantityReceived >
    < / ns2:ReceiptDetails >
    < / ns2:Receipt >
    < / ns2:ReceiptBatch >
    < / root >

    There are 2 tables in the database.
    Table 1 = T1743512
    Table 2 = T2743002

    table - structure

    T1743512-

    DOCO KCOO DTCO LNID LNIX LITM NOTICE USR JOBN UPMJ PID'M CKNU UREC
    123 00026 1 1 1000 1 1 123 - OP OP
    124 00026 1 1 1000 1 1 124 - OP OP
    123 00026 2 2 1000 2 2 123 - OP OP
    123 00026 3 3 1000 3 2 123 - OP OP



    Things to do are:--

    1. Research Notice T1743512 (table) with the following keys:
    1.T1743512. CKNU = < DeliveryNo > XML
    2.T1743512. LNIX = XML < row >
    II. write a record in the T2743002 table for each < RecieptDetails >. (See map below)

    Mapping of the records in the table T2743002 to < ReceiptDetails >

    EDU - "SABSSV".
    EDBT - < EDBT > (the same for all records)
    EDTN - < DeliveryNo > (from the section < reception > XML)
    EDLN - < row > (from < ReceiptDetails > section in XML format)
    EDSP - white
    DOCO - white
    DCTO - white
    KCOO - white
    LNID - white
    LITM - < ProductCode > < ReceiptDetails > section
    UORG - < QuantityAdvised > < ReceiptDetails > section
    UREC - < QuantityReceived > < ReceiptDetails > section
    USER - "SABSSV".
    JOBN - "SOA - 3PL".
    PID - 'PO-ENTRANTS ".
    UPMJ - current Date Julian
    - Hour current HHMMSS



    Please suggest the solution.

    Published by: Prashant_AP on June 22, 2012 12:24 AM

    Hello

    Solution by using a loop in BPEL;
    1 count the number of nodes for ReceiptDetails.
    2 create a counter for loop through each node ReceiptDetails. Use a while loop in BPEL
    3 search T1743512 (table) with DeliveryNo and the line. Make sure that you select the correct line from the ReceiptDetails node element node. This can be done using the counter example of xpatch ns2:ReceiptBatch / ns2:Receipt / ns2:ReceiptDetails [counter] / ns2:Line. Please use the DB adapter.
    I guess that the DeliveryNo can only appear once in the document following your example.
    4. for each receiptDetails you write a record in table too T2743002. Please use the DB adapter.
    5. Since the time increment the counter. This is to ensure that the while loop stops at the point where the counter is greater then the number of nodes to ReceiptDetails.

    I think a better solution is to make the loop in PL/SQL. It will be faster. You specify an input of type of collection in your pl/sql package parameter. Assign all items receiptDetails and DeliverNo line to the PL/SQL package. Within PL/SQL unravel you the closure. With a little luck, you have the T2743002 in the same schema to create the record too. Otherwise create synonyms of the database or database links.

    Good luck

    Thank you

    Sander

  • To loop through a table

    Is it possible to write code that loops through a table in a form? I am currently writing separate sections of code for each row in a table of five rows to validate the data entries.

    Hello

    It would be easier if your table contained a line that repeats with an initial count of five (defined in the binding of the object palette tab).  This will change the XML that is generated, but assuming that it is not a problem your could loop so your table with the code;

    lines of the var = this.resolveNodes ("Table1.Row1 [*]");

    for (var i = 0; i)

    {

    currentRow var = rows.item (i);

    .

    .

    .

    }

    If you don't need the lines of uniquely named then go I and the result of "this.resolveNodes("Table1.Row"+i)" in a function.

    You back form... with only the first validation converted to the new approach.

    https://Acrobat.com/#d=akb0 * Ptvdr3KSYN0VP * 7zA

    Hope this gets you started.

    Concerning

    Bruce

  • To loop through the structure of table - using xpath

    Hello

    My logic to BPEL process is as follows:
    a. extract the data in the variable - receiveMessageInputVariable
    The variable 'receiveMessageInputVariable' has in turn of the data in the table structure. (a set of elements)
    b. to transform the data to the target structure
    c. call the target of the link partner to store data in variable 'ServiceInputVariable '.
    The variable "ServiceInputVariable" structure is similar to "receiveMessageInputVariable".

    In the BPEL process "in the process of" level - I have catch-all exception handler - which must send the list of "elements" that failed in a BPEL proceeding.

    i. If my body of the email has the following code as below:
    < % bpws:getVariableData('receiveMessageInputVariable','XXINV_ITEM_PAY_ROW_TYPE','/ns4:XXINV_ITEM_PAY_ROW_TYPE/ITEMLINE/ITEMLINE_ITEM/ITEM_NUMBER') % >

    It recovers only the first record in the table item_number structure successfully. But don't get the other records in the table.

    II. Similarly, I want to print all the elements (such as received) to be available in the body of the email in the following model:

    < % ' Save a "% >
    < % bpws:getVariableData('receiveMessageInputVariable','XXINV_ITEM_PAY_ROW_TYPE','/ns4:XXINV_ITEM_PAY_ROW_TYPE/ITEMLINE/ITEMLINE_ITEM[1]/ITEM_NUMBER') % >
    < % ' < br / > "% >".
    < % 'Save two -' % >
    < % bpws:getVariableData('receiveMessageInputVariable','XXINV_ITEM_PAY_ROW_TYPE','/ns4:XXINV_ITEM_PAY_ROW_TYPE/ITEMLINE/ITEMLINE_ITEM[2]/ITEM_NUMBER') % >
    ....
    ..
    < % "Nth record" - % >
    < % bpws:getVariableData('receiveMessageInputVariable','XXINV_ITEM_PAY_ROW_TYPE','/ns4:XXINV_ITEM_PAY_ROW_TYPE/ITEMLINE/ITEMLINE_ITEM[N]/ITEM_NUMBER') % >

    Please suggest a syntax suitable in my body of the email - which can loop through all the itemline_item table and print all item_numbers.
    (pseudocode below)

    because me in 1... ORA: countNodes (bpws:getVariableData('receiveMessageInputVariable','XXINV_ITEM_PAY_ROW_TYPE','/ns4:XXINV_ITEM_PAY_ROW_TYPE/ITEMLINE/ITEMLINE_ITEM/ITEM_NUMBER'))
    loop
    < % ' article number-"% > < % bpws:getVariableData('i') % >".
    < % APO: getVariableData ('receiveMessageInputVariable', 'XXINV_ITEM_PAY_ROW_TYPE','/ ns4:XXINV_ITEM_PAY_ROW_TYPE/ITEMLINE/ITEMLINE_ITEM/ITEM_NUMBER')% >)
    end loop;


    Thank you
    Shakur

    Hi Shema

    Try the following approach. It can work for you

    1. create an XSD for HTML content








    2. create a XSL, can be that you must do manually, as JDev will not support transformations to HTML. This XSL will map your input XML to HTML file.
    3. create a variable in BPEL type in the XSD above
    4. use assign activity to assign the XSL transformation to the variable set to step #3


    5 copy the variable in the variable of email body



    Query = "" / EmailPayload/ns8: Content / ns8:ContentBody "/ >"

    Basically, the approach described above converts your entry to a value of string whose content is a complete HTML, and you'll use only one value to be assigned to the body of the email.

    Note: Please change the names of Variable/XPATH Expressions / / the name element from the XSL names etc. According to your BPEL file

    Hope this helps you

    Concerning
    LOC.

  • Making clips are supported through XML?

    I am importing an XML of any other editor in a project that uses clips blocking. Both of us are on FCPX & using the same media.

    When I import the xml file - I have a project with several chronologies camera & audio detached - that make it kind of silly for me to try to continue to the change.

    I'm doing something wrong or not blocking clips simply do not work through xml?

    Thank you

    Eric

    Fast lad says:

    I am importing an XML of any other editor in a project that uses clips blocking. Both of us are on FCPX & using the same media.

    When I import the xml file - I have a project with several chronologies camera & audio detached - that make it kind of silly for me to try to continue to the change.

    I'm doing something wrong or not blocking clips simply do not work through xml?

    Thank you

    Eric

    I tried this, and it worked as expected. I chose a project containing a multicam, exported XML file clip, has created a new library, XML import, and she came back properly.

    Both machines are running the same version of FCP X? What version of XML used (1.4 or 1.5 are supported in 10.2.3)?

  • Loops through Excel spreadsheets

    Hello

    I tried to loop through spreadsheets and Excel doc by increasing the grip of the worksheet. But unfortunately, that doesn't seem to be possible and I got an error.

       ExcelRpt_SetWorksheetAttribute(rawDataWorkSheetHandle,ER_WS_ATTR_NAME,"Analysis Data");
        __caErrChk(ExcelRpt_SetWorksheetAttribute(rawDataWorkSheetHandle+1,ER_WS_ATTR_NAME,"something"));
    

    Is it somehow possible to do? I do not have a handle for each worksheet in my workbook of haven...

    Thank you!

    Hello

    Like it or not, you need to obtain the handle of the worksheet if you want to access the attributes of worksheet.
    There is a function called ExcelRpt_GetWorksheetFromIndex to do this.

    This function returns the handle of the worksheet if you provide the 1-based index.
    Take care you need to call CA_DiscardObjHandle after you are finished with this worksheet.

    So the two functions above should be inside your loop.

  • To loop through a range of data

    Hi guys

    I have this set of numbers. 54 55 56 58 59 61 64 66. I want to loop through this set of numbers to give an array of result of 54 55 56 0 58 59 0 61 0 0 64 0 66.

    Simply, I'm trying to insert a zero in the interval + 1 white in this series of numbers. I couldn't find out how.

    Please help me thanks

    See you soon

    PX

    Hi pengxin,.

    See the image as an attachment.

    Mike

  • I want to loop through the data from two different tables using for loop where the query should be replaced at runtime, please help me

    I have the data into two table with the structure of similar column, I want to loop through the data in these two tables

    based on some condition and runtime that I want to put the query in loop for example, the example is given, please help me

    create table ab (a number, b varchar2 (20));

    Insert into ab

    Select rownum, rownum. "" sample "

    of the double

    connect by level < = 10

    create table bc (a number, b varchar2 (20));

    Insert into BC.

    Select rownum + 1, rownum + 1 | "" sample "

    of the double

    connect by level < = 10

    declare

    l_statement varchar2 (2000);

    Boolean bool;

    Start

    bool: = true;

    If it is true, then

    l_statement: =' select * ab ';

    on the other

    l_statement: =' select * from bc';

    end if

    I'm in execute immediate l_statement - something like that, but I don't know

    loop

    dbms_output.put_line (i.a);

    end loop;

    end;

    Something like that, but this isn't a peace of the code work.

    Try this and adapt according to your needs:

    declare

    l_statement varchar2 (2000);

    c SYS_REFCURSOR;

    l_a number;

    l_b varchar2 (20);

    Boolean bool;

    Start

    bool: = true;

    If it is true, then

    l_statement: = "select a, b, AB;

    on the other

    l_statement: = "select a, b from bc;

    end if;

    --

    Open c for l_statement;

    --

    loop

    extract the c in l_a, l_b;

    When the output c % notfound;

    dbms_output.put_line (l_a |') -' || l_b);

    end loop;

    close c;

    end;

    /

  • Looping through the operator stored in the table

    I have a table test

    oprtrop_val
    > =.100
    =50
    < =.10
    <5

    create table test (oprtr varchar2 (5), op_val number);

    Insert test values (' > =', 100);

    Insert into test values ('=', 50);

    insert into test values ("< =', 10");

    Insert test values (' < ', 5);

    I tried to loop through all the conditions of this table, this table is configurable, and there are cases where the new terms will be added and the old conditions can be modified or deleted,

    I wanted to do something like that, is there a way to do it or I have to write manually if condition to test all these cases by taking all the considerartion operator.

    Val: = 500;

    I'm in (select * from test)

    loop

    If val i.oprtr i.op_val then

    dbms_output.put_line ('True Condition is' |: o PRTR);

    end if;

    end loop;

    Please help me if there is a way to do it.

    Hello raj4tech

    Here's an example how you can solve this problem:

    DECLARE

    Val the NUMBER: = 500;

    v_statement VARCHAR2 (500);

    v_result VARCHAR2 (10);

    BEGIN

    FOR I IN (SELECT oprtr, op_val

    OF THE TEST

    )

    LOOP

    BEGIN

    v_statement: = 'SELECT BOX WHEN "| To_char (Val). ' ' || i.oprtr | ' ' || To_char (i.op_val) | "THEN" TRUE"OTHER"FALSE"END AS A RESULT OF THE DOUBLE."

    V_statement EXECUTE IMMEDIATE

    IN v_result;

    DBMS_OUTPUT. PUT_LINE (' "' |") To_char (Val). ' ' || i.oprtr | ' ' || To_char (i.op_val) | ""--> Result: ' | v_result);

    END;

    END LOOP;

    END;

    /

    "500 > = 100 '--> result: TRUE

    '500 = 50'--> result: FALSE

    ' 500 <= 10" ="" --="">result: FALSE ".

    ' 500 < 5"   ="" --=""> result: FALSE ".

    I hope it helps.

    Best regards, David

  • ÖAF - loop through a vo and get values of attribute associated with line

    HI people,

    I need code of the OPS to loop through a VO and retrieve the values of attribute associated with each line.

    I use following code in AM after - vo.invokeMethod ("initQuery", params, classes) - line.

    for (loop = 0 int; loop < vo.getRowCount (); loop ++) {}

    Line resultRow = vo.getCurrentRow ();

    If (resultRow! = null)

    System.out.println ("" + (String) resultRow.GetAttribute ("PARTYID"));

    }

    -resultRow - is done with the null value.

    Please share the code to achieve this.

    Thank you

    NGO

    You must call vo.next () to move to the next row, but this isn't a good method.

    You can browse the lines of the vo in two aspects.

    First one uses an iterator that is more reliable because it does not change the current line. You must create the java vo RowImpl file to do this.

    int fetchRowCount = vo.getFetchRowCount();
    voRowImpl row = null;
    if (fetchRowCount  > 0) {
        RowSetIterator iter = vo.createRowSetIterator("Iter");
            iter.setRangeStart(0);
            iter.setRangeSize(fetchBidderRowCount);
            for (int i = 0; i < fetchBidderRowCount; i++) {
                row = voRowImpl iter.getRowAtRangeIndex(i);
                 //use RowImpl getters
                 Number personId = row.getPersonId();
        }
        iter.closeRowSetIterator();
    }
    

    Second, one is your method proper form:

    for (Row row = rowsVo.first(); row != null; row = rowsVo.next()) {
         Number personId = (Number)row.getAttribute("PersonId");
    }
    

    Kind regards

    Anil.

  • Work Dbma_scheduler execution of procedure which loops through all the customer drawings in the rear rollers database transaction in case of exception

    Hello

    Need your contributions on the approach to implement a work using dbms_scheduler.

    We have about 2000 drawings. Each schema has a package with 2 procedures.

    The requirement is to create a single job in SYS that loop over each schema and run the procedures specific to a time (once a day) and send a notification by e-mail on success or failure.

    Working script:

    BEGIN

    dbms_scheduler.create_job (job_name = > 'LOAD_EACH_SCHEMA_AUDIT_DATA',)

    job_type = > 'PLSQL_BLOCK ',.

    job_action = > ' BEGIN sys.p_loadaudit;

    END;',

    start_date = > systimestamp,

    repeat_interval = > ' FREQ = MINUTELY; RANGE = 1',

    number_of_arguments = > 0,

    enabled = > true,

    Comments = > "Use repeat interval is every five minutes");

    END;

    /

    Note: to test the end I put him repeat interval to carefully.

    Use of procedure must be running:

    Procedure sys.p_loadaudit:

    CREATE OR REPLACE

    PROCEDURE p_loadaudit

    AS

    v_count NUMBER: = 0;

    lv_error_message VARCHAR2 (4000);

    vstmt VARCHAR2 (4000);

    BEGIN

    I'm IN

    (SELECT username FROM dba_users WHERE username LIKE '% ABCFIRM')

    )

    LOOP

    vstmt: = "begin" | i.UserName | '. pkg_audit_info.p_load_coa; end;';

    EXECUTE immediate vstmt;

    vstmt: = "begin" | i.UserName | '. pkg_audit_info.p_load_am; end;';

    EXECUTE immediate vstmt;

    END LOOP;

    EXCEPTION

    WHILE OTHERS THEN

    lv_error_message: = ' error in procedure p_loadaudit: ' | SQLCODE. "- ERROR -" | SUBSTR)

    SQLERRM, 1, 300). '*' || dbms_utility.format_error_backtrace;

    raise_application_error(-20002,lv_error_message);

    END p_loadaudit;

    /

    Example of a scheme: SCHEMA_01

    create or replace

    PACKAGE pkg_audit_info

    AS

    CursorType type

    IS

    REF

    CURSOR;

    PROCEDURE p_load_COA;

    PROCEDURE p_load_AM;

    END pkg_audit_info;

    /

    create or replace

    Pkg_audit_info body PACKAGE

    AS

    PROCEDURE p_load_COA

    AS

    BEGIN

    INSERT INTO TABLE1();

    EXCEPTION

    WHILE OTHERS THEN

    lv_error_message: = ' error in procedure pkg_audit_info.p_load_COA: ' | SQLCODE

    || "- ERROR -" | SUBSTR (SQLERRM, 1, 300). '*' || dbms_utility.format_error_backtrace;

    RAISE_application_error(-20002,lv_error_message);

    END p_load_COA;

    PROCEDURE p_load_AM

    AS

    BEGIN

    INSERT INTO TABLE2();

    EXCEPTION

    WHILE OTHERS THEN

    lv_error_message: = ' error in procedure pkg_audit_info.p_load_AM: ' | SQLCODE.

    "- ERROR -" | SUBSTR (SQLERRM, 1, 300). '*' || dbms_utility.format_error_backtrace;

    RAISE_application_error(-20002,lv_error_message);

    END p_load_AM;

    END pkg_audit_info;

    /

    Table1 and table1 exist in schema_01.

    All 2000 patterns have same package.procedures.

    For security reasons, I removed the actual code.

    I was able to complete the task successfully. However, when a scheme procedure (SCHEMA_01.pkg_audit_info.p_load_COA) throws an exception, the job fails, and any transaction is rolled back.

    Is it possible to loop through each schema and run the corresponding procedures. Even if the exception occurs, it must restore only for this scheme and continue other patterns in the loop?

    Please let me know if there is a better way to do this. Is the way I'm handling exceptions in the work or the correct procedure?

    Thank you

    Hello

    RAISE_APPLICATION_ERROR will cause the program to exit to the appellant, even if you put it inside a block in the loop, so the statement RAISE or RAISE_APPLICATION_ERROR must be placed in your procedures 'pkg_audit_info.p_load_AM' and 'pkg_audit_info.p_load_coa '. In this way, you can use a block inside the loop and the error in the log.

    I'm IN

    (SELECT username FROM dba_users WHERE username LIKE '% ABCFIRM')

    )

    LOOP

    BEGIN

    vstmt: = "begin" | i.UserName | '. pkg_audit_info.p_load_coa; end;';

    EXECUTE immediate vstmt;

    vstmt: = "begin" | i.UserName | '. pkg_audit_info.p_load_am; end;';

    EXECUTE immediate vstmt;

    EXCEPTION

    WHILE OTHERS THEN

    --> Set the error in a table of otherwise custom event log you won't know what happened for this scheme: don't forget the user name

    END;

    END LOOP;

Maybe you are looking for

  • design of level control model

    can someone help me to make the model of water level control in the labview platform. Thank you Serkan

  • Smart Pavilion Touch 14-n056sa: Touro Hitachi 500 GB portable drive will not work on Win 10

    Before I updated to win 8 to 10 to win my Hitachi 500 GB portable hard drive did Touro worked to make a backup of. Now, it won't. It shows in the Device Manager and in the backup and support (windows 7) in the Panel, but in the latter there is a red

  • Inspiron 580 CPU update

    Hello everyone, I know this question has been asked, but the information is now outdated. The motherboard is a socket 1156, came with Core i3 and i5 stock, and many have said that the i7 rested not because it wasn't at this outlet at the time factor.

  • T61 does not connect to the network through a station

    I have a T61hat all of a sudden this week the network connection has stopped working when I am connected through my docking station. If I remove and plug the network cable into the T61 it immediately connects, but when I first connected it does not c

  • IPAQ211

    I can't get into my IPAQ, it does not recognize my password is there away around this, where can I change to a new password.  I need to get this information quickly, to keep the loose major bucks on the quotes I have in the system.