Parse BPEL Output in PL-SQL

Hello,
I am invoking WSDL from PL/SQL and WSDL is returning following output.
+<?xml version="1.0" encoding="UTF-8"?>+
+<SOAP-ENV:Envelope+
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<SOAP-ENV:Header+
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"></SOAP-ENV:Header><SO
AP-ENV:Body>
+<ser-root:soapIntefraceASVOutput+
xmlns:ser-root="http://eai.corpit.microsoft.com/microAccountValidation/provider/Acc
ountStringValidator"><acctStringValidateOutput>
+<status>112</status>+
+<message>In+
valid account segment
code</message></acctStringValidateOutput></ser-root:soapIntefraceASVOutput></SOA
P-ENV:Body>
+</SOAP-ENV:Envelope>+
I wanted to parse this XML in my PL/SQL Block and wanted to retrieve <status> and <message> element Value.
Please help me on this.
Thank You
AB,

using XPATH and a SQL you can get it.
eg:
-- test with 10gR2
CURSOR grab_one_value(xt IN xmltype, path_to IN VARCHAR2) IS
SELECT extractvalue(xt, path_to, c_namespace)
FROM dual;
OPEN grab_one_value(xml_in, tag_in);
FETCH grab_one_value
INTO v_out;
CLOSE grab_one_value;
RETURN v_out;
--Prasanna                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

Similar Messages

  • Parse BPEL output using PL/SQL

    Hello,
    I am invoking WSDL from PL/SQL and WSDL is returning following output.
    +<?xml version="1.0" encoding="UTF-8"?>+
    +<SOAP-ENV:Envelope+
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    +<SOAP-ENV:Header+
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"></SOAP-ENV:Header><SO
    AP-ENV:Body>
    +<ser-root:soapIntefraceASVOutput+
    xmlns:ser-root="http://eai.corpit.microsoft.com/microAccountValidation/provider/Acc
    ountStringValidator"><acctStringValidateOutput>
    +<status>112</status>+
    +<message>In+
    valid account segment
    code</message></acctStringValidateOutput></ser-root:soapIntefraceASVOutput></SOA
    P-ENV:Body>
    +</SOAP-ENV:Envelope>+
    I wanted to parse this XML in my PL/SQL Block and wanted to retrieve <status> and <message> element Value.
    Please help me on this.
    Thank You
    AB,

    This is probably not a good pattern for invoking webservices from database, it would be better to invoke this webserivce asynchronously via a queue/table and have another webservice invoked from that webservice, which would process the response, wrapping the pl/sql logic - but then your case may be unique.
    To parse this XML in pl/sql, you would do the following if the varchar2 variable v_response_string contains the soap response from the web service:
    v_response := XMLType.createXML(v_response_string);
    v_status := v_response.extract('/soap:Envelop/soap:Body/ser-root:soapIntefraceASVOutput/acctStringValidateOutput/status/text()'
    , 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" '||
    'xmlns:ser-root="http://eai.corpit.microsoft.com/microAccountValidation/provider/AccountStringValidator"'
    v_ message := v_response.extract('/soap:Envelop/soap:Body/ser-root:soapIntefraceASVOutput/acctStringValidateOutput/message/text()'
    , 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" '||
    'xmlns:ser-root="http://eai.corpit.microsoft.com/microAccountValidation/provider/AccountStringValidator"'
    Hope this helps,
    Thanks,
    Shanmu.
    http://www.prshanmu.com/articles/

  • Parse complex XML in PL/SQL

    have complex XML with depth level 10. I need to parse and store data into tables from XML. I am able to parse simple XML but not complex. Could any body suggest me the required steps to parse complex XML in PL/SQL?

    Based on response from mdrake on this thread:
    Re: XML file processing into oracle
    Reading XML using a schema...
    declare
      SCHEMAURL VARCHAR2(256) := 'http://xmlns.example.org/xsd/testcase.xsd';
      XMLSCHEMA VARCHAR2(4000) := '<?xml version="1.0" encoding="UTF-8"?>
         <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" xdb:storeVarrayAsTable="true">
            <xs:element name="cust_order" type="cust_orderType" xdb:defaultTable="CUST_ORDER_TBL"/>
            <xs:complexType name="groupType" xdb:maintainDOM="false">
                    <xs:sequence>
                            <xs:element name="item" type="itemType" maxOccurs="unbounded"/>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:byte" use="required"/>
            </xs:complexType>
            <xs:complexType name="itemType" xdb:maintainDOM="false">
                    <xs:simpleContent>
                            <xs:extension base="xs:string">
                                    <xs:attribute name="id" type="xs:short" use="required"/>
                                    <xs:attribute name="name" type="xs:string" use="required"/>
                            </xs:extension>
                    </xs:simpleContent>
            </xs:complexType>
            <xs:complexType name="cust_orderType" xdb:maintainDOM="false">
                    <xs:sequence>
                            <xs:element name="group" type="groupType" maxOccurs="unbounded"/>
                    </xs:sequence>
                    <xs:attribute name="cust_id" type="xs:short" use="required"/>
            </xs:complexType>
         </xs:schema>';
      INSTANCE  CLOB :=
    '<cust_order cust_id="12345">
      <group id="1">
        <item id="1" name="Standard Mouse">100</item>
        <item id="2" name="Keyboard">100</item>
        <item id="3" name="Memory Module 2Gb">200</item>
        <item id="4" name="Processor 3Ghz">25</item>
        <item id="5" name="Processor 2.4Ghz">75</item>
      </group>
      <group id="2">
        <item id="1" name="Graphics Tablet">15</item>
        <item id="2" name="Keyboard">15</item>
        <item id="3" name="Memory Module 4Gb">15</item>
        <item id="4" name="Processor Quad Core 2.8Ghz">15</item>
      </group>
      <group id="3">
        <item id="1" name="Optical Mouse">5</item>
        <item id="2" name="Ergo Keyboard">5</item>
        <item id="3" name="Memory Module 2Gb">10</item>
        <item id="4" name="Processor Dual Core 2.4Ghz">5</item>
        <item id="5" name="Dual Output Graphics Card">5</item>
        <item id="6" name="28inch LED Monitor">10</item>
        <item id="7" name="Webcam">5</item>
        <item id="8" name="A3 1200dpi Laser Printer">2</item>
      </group>
    </cust_order>';                
    begin
      dbms_xmlschema.registerSchema
         schemaurl       => SCHEMAURL
        ,schemadoc       => XMLSCHEMA
        ,local           => TRUE
        ,genTypes        => TRUE
        ,genBean         => FALSE
        ,genTables       => TRUE
        ,ENABLEHIERARCHY => DBMS_XMLSCHEMA.ENABLE_HIERARCHY_NONE
      execute immediate 'insert into CUST_ORDER_TBL values (XMLTYPE(:INSTANCE))' using INSTANCE;
    end;
    desc CUST_ORDER_TBL
    --SQL> desc CUST_ORDER_TBL
    -- Name                                                                                                                                    Null?    Type
    -- TABLE of SYS.XMLTYPE(XMLSchema "http://xmlns.example.org/xsd/testcase.xsd" Element "cust_order") STORAGE Object-relational TYPE "cust_orderType222_T"
    set autotrace on explain
    set pages 60 lines 164 heading on
    col cust_id format a8
    select extract(object_value,'/cust_order/@cust_id') as cust_id
          ,grp.id as group_id, itm.id as item_id, itm.inm as item_name, itm.qty as item_qty
    from   CUST_ORDER_TBL
          ,XMLTABLE('/cust_order/group'
                    passing object_value
                    columns id   number       path '@id'
                           ,item xmltype      path 'item'
                   ) grp
          ,XMLTABLE('/item'
                    passing grp.item
                    columns id   number       path '@id'
                           ,inm  varchar2(30) path '@name'
                           ,qty  number       path '.'
                   ) itm
    CUST_ID    GROUP_ID    ITEM_ID ITEM_NAME                        ITEM_QTY
    12345             1          1 Standard Mouse                        100
    12345             1          2 Keyboard                              100
    12345             1          3 Memory Module 2Gb                     200
    12345             1          4 Processor 3Ghz                         25
    12345             1          5 Processor 2.4Ghz                       75
    12345             2          1 Graphics Tablet                        15
    12345             2          2 Keyboard                               15
    12345             2          3 Memory Module 4Gb                      15
    12345             2          4 Processor Quad Core 2.8Ghz             15
    12345             3          1 Optical Mouse                           5
    12345             3          2 Ergo Keyboard                           5
    12345             3          3 Memory Module 2Gb                      10
    12345             3          4 Processor Dual Core 2.4Ghz              5
    12345             3          5 Dual Output Graphics Card               5
    12345             3          6 28inch LED Monitor                     10
    12345             3          7 Webcam                                  5
    12345             3          8 A3 1200dpi Laser Printer                2
    17 rows selected.Need at least 10.2.0.3 for performance i.e. to avoid COLLECTION ITERATOR PICKLER FETCH in execution plan...
    On 10.2.0.1:
    Execution Plan
    Plan hash value: 3741473841
    | Id  | Operation                          | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                   |                        | 24504 |    89M|   873   (1)| 00:00:11 |
    |   1 |  NESTED LOOPS                      |                        | 24504 |    89M|   873   (1)| 00:00:11 |
    |   2 |   NESTED LOOPS                     |                        |     3 | 11460 |   805   (1)| 00:00:10 |
    |   3 |    TABLE ACCESS FULL               | CUST_ORDER_TBL         |     1 |  3777 |     3   (0)| 00:00:01 |
    |*  4 |    INDEX RANGE SCAN                | SYS_IOT_TOP_774117     |     3 |   129 |     1   (0)| 00:00:01 |
    |   5 |   COLLECTION ITERATOR PICKLER FETCH| XMLSEQUENCEFROMXMLTYPE |       |       |            |       |
    Predicate Information (identified by operation id):
       4 - access("NESTED_TABLE_ID"="CUST_ORDER_TBL"."SYS_NC0000900010$")
           filter("SYS_NC_TYPEID$" IS NOT NULL)
    Note
       - dynamic sampling used for this statementOn 10.2.0.3:
    Execution Plan
    Plan hash value: 1048233240
    | Id  | Operation               | Name              | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT        |                   |    17 |   132K|   839   (0)| 00:00:11 |
    |   1 |  NESTED LOOPS           |                   |    17 |   132K|   839   (0)| 00:00:11 |
    |   2 |   MERGE JOIN CARTESIAN  |                   |    17 |   131K|   805   (0)| 00:00:10 |
    |   3 |    TABLE ACCESS FULL    | CUST_ORDER_TBL    |     1 |  3781 |     3   (0)| 00:00:01 |
    |   4 |    BUFFER SORT          |                   |    17 | 70839 |   802   (0)| 00:00:10 |
    |*  5 |     INDEX FAST FULL SCAN| SYS_IOT_TOP_56154 |    17 | 70839 |   802   (0)| 00:00:10 |
    |*  6 |   INDEX UNIQUE SCAN     | SYS_IOT_TOP_56152 |     1 |    43 |     2   (0)| 00:00:01 |
    |*  7 |    INDEX RANGE SCAN     | SYS_C006701       |     1 |       |     0   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       5 - filter("SYS_NC_TYPEID$" IS NOT NULL)
       6 - access("SYS_NTpzENS1H/RwSSC7TVzvlqmQ=="."NESTED_TABLE_ID"="SYS_NTnN5b8Q+8Txi9V
                  w5Ysl6x9w=="."SYS_NC0000600007$")
           filter("SYS_NC_TYPEID$" IS NOT NULL AND
                  "NESTED_TABLE_ID"="CUST_ORDER_TBL"."SYS_NC0000900010$")
       7 - access("SYS_NTpzENS1H/RwSSC7TVzvlqmQ=="."NESTED_TABLE_ID"="SYS_NTnN5b8Q+8Txi9V
                  w5Ysl6x9w=="."SYS_NC0000600007$")
    Note
       - dynamic sampling used for this statement-----
    -- CLEAN UP
    DROP TABLE CUST_ORDER_TBL purge;
    exec dbms_xmlschema.deleteschema('http://xmlns.example.org/xsd/testcase.xsd');

  • Invoking BPEL Process through pl/sql is failing

    Hi all,
    I am trying to invoke BPEL process through PL/SQL and its throwing following error.
    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header/><env:Body><env:Fault xmlns="http://xmlns.oracle.com/pcbpel/adapter/file/ReadFile/"><faultcode xmlns="">null:Read_ptt</faultcode><faultstring xmlns="">Cannot figure out operation name. Bad SOAPAction or wsa:Action.</faultstring><faultactor xmlns="">initiate</faultactor></env:Fault></env:Body></env:Envelope>
    Following is code I am using to invoke BPEL PROCESS
    declare
    soap_request varchar2(30000);
    soap_respond varchar2(30000);
    http_req utl_http.req;
    http_resp utl_http.resp;
    begin
    soap_request:='<?xml version="1.0" encoding="UTF-8"?>
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header/>
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/pcbpel/adapter/file/ReadFile/">
    --<ns1:Read_plt><ns1:input>leeg</ns1:input></ns1:Read_plt>
    </soap:Body>
    </soap:Envelope>';
    http_req:= sys.utl_http.begin_request('http://localhost/orabpel/default/BPELProcess1/v2007_12_03__65618','POST','HTTP/1.1' );
    sys.utl_http.set_header(http_req, 'Content-Type', 'text/xml') ;
    sys.utl_http.set_header(http_req, 'Content-Length', length(soap_request)) ;
    sys.utl_http.set_header(http_req, 'SOAPAction', 'initiate');
    sys.utl_http.write_text(http_req, soap_request) ;
    http_resp:= sys.utl_http.get_response(http_req) ;
    sys.utl_http.read_text(http_resp, soap_respond) ;
    sys.utl_http.end_response(http_resp) ;
    dbms_output.put_line(soap_respond);
    end;
    Any help would be appriciated.
    Thanks,
    Vipul

    Hi,
    Switching on or off a bpel is an admin job.
    u can stop an application but not one bpel.
    I doubt if there is any way to do it programatically.
    Let us get other opinons
    Regards

  • How do I create individual xml files from the parsed data output of a xml file?

    I have written a program (DOM Parser) that parses data from a XMl File. I would like to create an individual file with the corresponding name for each set of data parsed from the xml document. If the parsed output is Single, Double, Triple, I would like to create an individual xml file (Single.xml, Double.xml, Triple.xml)with those corresponding names. How do I create the xml files and give each file the name of my parsed data output? Thanks in advance for your help.
    import java.io.IOException;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    public class MyDomParser {
      public static void main(String[] args) {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      try {
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document doc = builder.parse("ENtemplate.xml");
      doc.normalize();
      NodeList rootNodes = doc.getElementsByTagName("templates");
      Node rootNode = rootNodes.item(0);
      Element rootElement = (Element) rootNode;
      NodeList templateList = rootElement.getElementsByTagName("template");
      for(int i=0; i < templateList.getLength(); i++) {
      Node theTemplate = templateList.item(i);
      Element templateElement = (Element) theTemplate;
      System.out.println("Template" + ": " +templateElement.getAttribute("name")+ ".xml");
      } catch (ParserConfigurationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (SAXException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();

    Ive posted the new code but now I'm getting a FileAlreadyExistException error. How do I handle this exception error correctly in my code?
    import java.io.IOException;
    import java.nio.file.FileAlreadyExistsException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    public class MyDomParser {
      public static void main(String[] args) {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      try {
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document doc = builder.parse("ENtemplate.xml");
      doc.normalize();
      NodeList rootNodes = doc.getElementsByTagName("templates");
      Node rootNode = rootNodes.item(0);
      Element rootElement = (Element) rootNode;
      NodeList templateList = rootElement.getElementsByTagName("template");
      for(int i=0; i < templateList.getLength(); i++) {
      Node theTemplate = templateList.item(i);
      Element templateElement = (Element) theTemplate;
      System.out.println(templateElement.getAttribute("name")+ ".xml");
      for(int i=0; i < templateList.getLength(); i++) {
      Node theTemplate = templateList.item(i);
      Element templateElement = (Element) theTemplate;
      String fileName = templateElement.getAttribute("name") + ".xml";
      Files.createFile(Paths.get(fileName));
      System.out.println("File" + ":" + fileName + ".xml created");
      } catch (ParserConfigurationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (SAXException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();

  • Saving the output of a .sql file in .csv format

    Hi,
    I am saving the output of a .sql file in .csv format. But the problem is , the record of few columns have "new line" character in it, so when it is getting saved in .csv format, those records are coming in multiple rows, but they should come in one single row in single block. Please advise how to overcome this problem.
    Regards,
    Niraj

    Hi Guys,
    I guess, there is a misunderstanding.
    He is talking about the issue caused as a result of the data containing a "CRLF" ( Carriage return Line feed ) .
    That is mainly a data issue.
    The query i presume, must be right.
    I guess you should be able to fix it using some string functions.
    Some thing similar to this
    CREATE TABLE ASH (NAME VARCHAR2(10))
    SELECT REPLACE(NAME, CHR(13)||CHR(10), 'ISH') FROM ASH;
    SELECT REPLACE(NAME, CHR(10), 'ISH') FROM ASH;
    SELECT REPLACE(NAME, CHR(13), 'ISH') FROM ASH;
    depending on the type of new line whether it is CR or LF. or CRLF.
    Regards
    Ashish/-

  • Parsing a string in PL/SQL?

    I am parsing a string in PL/SQL and at a certain point(Length 45) of the string I would like to add a carriage return (Chr(10)), then continue with the string at that point and then again if the string is greater than Length 45 add a carriage return.
    I program in Powerbuilder and have figured it out, but I have a problem when trying to add a carriage return at a certain point in the string in PL/SQL. There is the REPLACE(), but that will replace everything, but I only want to add it at that certain point of the string. With the PB function I can add the carriage return at a certain point, see code:
    Li_pos = PosA( Ps_data, '*')
    DO WHILE Li_pos > 0
    ll_length = Li_pos - ll_old_pos
    IF ll_length > 45 THEN
    ll_old_pos = Li_pos
    Ps_data = ReplaceA( Ps_data, Li_Pos, 1, ls_carriage_rtn) **This function gives me the ability to add a carriage return at a certain point in the string. **
    Li_pos = PosA( Ps_data, '*', Li_pos + 1 + ls_carriage_rtn)
    ELSE
    Li_pos = PosA( Ps_data, '*', Li_pos + 1)
    END IF
    LOOP
    I have incorporated the same logic in PL/SQL but I am looking for something similar to the ReplaceA function in PB, that will replace at a certain point in a string. I use an '*' as a placeholder and measure the length. Below is the PL/SQL code:
    t_pos NUMBER;
    t_old_pos NUMBER;
    t_length NUMBER;
    BEGIN
    t_old_pos := 0;
    t_pos := INSTR(in_model_list, '*');
    WHILE t_pos > 0 LOOP
    t_length := t_pos - t_old_pos; -- This looks at current position minus the old position, measures the length
    IF t_length > 45 THEN
    t_old_pos := t_pos;
    *** add that carriage return
    t_pos := INSTR(in_model_list, '*', t_pos + 1 + Chr(10)); -- get the new position
    NULL;
    ELSE
    t_pos := INSTR(in_model_list, '*', t_pos + 1);
    END IF;
    NULL;
    END LOOP;
    Here is the data, what it looks like: William 112,* 500-A,* 500-U,* 520,* 560-A,* 560-E,* 680-E,* 680-F,* 680-V*
    Any help would be much appreciated.
    Thank you,
    William
    Edited by: William on Feb 28, 2012 6:56 AM

    Frank Kulash wrote:
    [example]I played with your example and came to this:SQL> WITH my_string AS
      2         (SELECT '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'
      3                   AS mt
      4            FROM DUAL)
      5     ,  line_length AS
      6         (SELECT 13 AS chars
      7            FROM DUAL)
      8      SELECT LISTAGG (REGEXP_SUBSTR (mt,'(.{'|| line_length.chars|| '})', 1, LEVEL),chr(10)) WITHIN GROUP (ORDER BY LEVEL)
      9             ||chr(10)
    10             ||substr(mt,-mod(LENGTH (mt),line_length.chars)) as wrapped_text
    11        FROM my_string
    12        CROSS JOIN line_length
    13  CONNECT BY LEVEL < 1+LENGTH (mt) ;
    WRAPPED_TEXT
    1234567890123
    4567890123456
    7890123456789
    0123456789012
    3456789012345
    6789012345678
    9012345678901
    2345678901234
    5678901234567
    8901234567890
    1234567890123
    WRAPPED_TEXT
    4567890123456
    7890
    SQL>*[Edit]* annotated that this is 11g only...
    Edited by: T.PD on 29.02.2012 21:17

  • External Parser - XML to Pipe Delimited - Sql Loader BETTER DBMS_XMLSTORE

    Hi All,
    If I have got data in GIGs in a complex format.
    Can Using an External Java based XML Parser to convert XML to Pipe Delimited FIle and then Using SQL Loader
    BE BETTER THAN
    Using XSL to convert to Oracle <ROWSET> <ROW> Format and using DBMS_XMLSTORE to load data into tables.
    In terms of:
    Performace
    Scalability
    Exception Handling
    Regards....

    Go to the {forum:id=34} forum and look at the second page of the XML DB FAQ Thread (stickied to the top of the posts). While it doesn't compare using external tools to parse XML and load via SQL*Loader, it does talk about better ways to load large amounts of XML into the DB. This is also a good thread on the subject too from that forum, {thread:id=1096784}

  • Output of PL/SQL code in Client Machine.

    I am writing the output of PL-SQL code to a file. Later on I will use that output in a UNIX shell script.
    For that I am creating directory object and using the UTL_FILE.fopen and UTL_FILE.put_line functions of UTL_FILE package in Oracle.
    E.G.
    1) CREATE OR REPLACE DIRECTORY MYDIR AS '…………………ANY VALID DIRECTORY PATH IN SERVER……………………………’;
    2)
    DECLARE
    config_file UTL_FILE.file_type;
    lv_i BINARY_INTEGER := 1;
    BEGIN
    lv_i := 2;
    config_file := UTL_FILE.fopen ('MYDIR', 'test.txt', 'W');
    UTL_FILE.put_line (config_file, 'This is test file' || 'lv_i= ' || lv_i);
    UTL_FILE.fclose (config_file);
    END;
    But UTL_FILE.fopen and UTL_FILE.put_line functions in oracle can write only to ORACLE SERVER side files.
    However, I want to write the output of the file to the UNIX box from where I am accessing database (using sqlplus DB_USER_NAME/DB_PASSWORD@DB_NAME).
    Is it possible in Oracle 10g (10.2.0.4.0) to write the output of PL/SQL code in client machine?

    Hi,
    Just an idea. I haven't tried it before in unix server since there's no chance to.
    In Windows you can actually map the specified folder where you want to write the file, so in this case, you just need to find a way on how you can map/mount the folder/directory where you want your file written. UTL_FILE can be used to write files(if the file does not exists) and write text in that file on a directory accross the network as I have done it before in Windows machine.
    Regards.

  • Error while parsing SRVCTL output.

    OS : Sun 5.10 SPARC Machine
    DB :11.2.0.1 (Cluster Nodes)
    On DB Control, while checking "Cluster Managed Database Services " getting below error.
    Error while parsing SRVCTL output. Ensure that SRVCTL is functioning properly. I have checked the status of all the processes on that node, looks gsd process is down and in the db control log file getting below error .
    at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:221)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:122)
    at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:111)
    at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
    at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
    at java.lang.Thread.run(Thread.java:595)
    2010-11-02 10:05:39,751 [Thread-42] ERROR db.rac parseStatusConfig.1010 - SrvctlDatabaseInfo.parseStatusConfig: no parsable status l
    ines.
    2010-11-02 10:38:50,440 [EMUI_10_38_49_/console/rac/racSitemap] WARN em.MetricEngine getCachedData.316 - Metric RAC_HOMETAB contain
    s no cached data!
    2010-11-02 10:38:51,260 [EMUI_10_38_49_/console/rac/racSitemap] WARN em.MetricEngine getCachedData.316 - Metric RAC_HOMETAB contain
    s no cached data!
    2010-11-02 10:39:11,514 [Thread-48] ERROR db.rac parseStatusConfig.1010 - SrvctlDatabaseInfo.parseStatusConfig: no parsable status l
    ines.
    What could be the issue ?

    what command did you execute?
    does it work from the second node?
    did you try rebooting the node?
    did you check clusterware services? some of the processess may have not started properly or died ...
    has it worked before ? or its a new installation ?

  • Sort data Date wise(YYYY-MM-Date) in BPEL output

    HI,
    Can any one help me, how to write code for sort data Date wise(YYYY-MM-Date) .
    I pass the input as Name from the service wsdl(Exposed Services) and its call the third party service(External References) , its return the output like below one,
    Name:Vodafone
    Pole:INdia
    End Date:2012-05-12
    Name:Airtel
    Pole:USA
    End Date:2012-05-13
    Name:Uninor
    Pole:Canda
    End Date:2020-10-13
    Name:Celltell
    Pole:INdia
    End Date:2011-03-21
    Above o/p in Random way, but i need this one in sort data date wise.
    Finally i need output based on the latest End Date..
    like,
    Name:Uninor
    Pole:Canda
    End Date:2020-10-13
    Name:Airtel
    Pole:USA
    End Date:2012-05-13
    Name:Vodafone
    Pole:INdia
    End Date:2012-05-12
    Name:Celltell
    Pole:INdia
    End Date:2011-03-21.
    Could you please help me the format of code, and where to i implement this one. its very urgrnt.
    Regards,
    Harsih

    Hi
    Sukanya,
    Thanks for ur quick replyy, i fetch data from external reference onlyy. If i fetch data from DB what u said its exactly right.
    Re: Sort data Date wise(YYYY-MM-Date) in BPEL output 

  • Mediator fails to capture bpel output

    Mediator fails to capture bpel output
    Edited by: soauser on Jan 8, 2012 10:24 AM

    Mediator fails to capture bpel output
    Edited by: soauser on Jan 8, 2012 10:24 AM

  • Parse JSON records using PL/SQL and store the output in Oracle Database.

    We have JSON data/record stored in a Oracle table as CLOB(database version 10g). We need to read/parse this JSON data and recognize the relevant tags and corresponding values in this JSON data and then insert these id/values into a separate Oracle staging table.
    Please let me know if there is any re-usable code available for this.
    We are looking for solution that does this manipulation in pl/sql. If this is not feasible, even Java code approach is fine.
    Regards,
    Kiranmayi.

    Hello,
    PL/JSON | Free software downloads at SourceForge.net
    ERASME - pl/sql library for JSON
    Regards
    Marcus

  • Passing value from ADF to BPEL, and to PL/SQL  procedure

    1. I have created BPEL which take 2 inputs and concatenate them.
    2. have created a PL/SQL procedure for invoking this BPEL( working fine).
    Now i need to create a simple ADF page which contain 2 text box, 2 for input and 1 for result(concatenate), this will take 2 inputs and send them into BPEL, this will invoke the BPEL process and perform the necessary concatenate function...
    in addition to this, i am passing code into PL/SQL procedure ...
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body xmlns:ns1="http://xmlns.oracle.com/OrderImportDemo">
    <ns1:InputRequest>
    <ns1:FirstName>abcdef</ns1:FirstName>
    <ns1:LastName>aaaaaa</ns1:LastName>
    </ns1:InputRequest>
    </soap:Body>
    </soap:Envelope>';
    this code will take vaule from BPEL and run properly.
    can you please help me,

    thanks for help, but the problem is diff.
    i don't have any schema, what i want i need to create a adf page that will contain 3 tent field, 2 for input and 1 for output. when i will enter 2 input field and click on ok button, this will invoke BPEL, BPEL will take these 2 inputs and do the concat on this and send back to adf with result.

  • Pass output from PL/SQL proc back to ODI for logging

    Hi,
    In ODI (10g), is there any way to pass output from a PL/SQL procedure back to the calling stage?
    I am working on the run time of a batch, one part of which calls a procedure and so currently black box.
    I'd like to instrument the proc so that I can see in Operator some kind of timed activity so that I can profile its activity better.
    The best I've had suggested so far is to write out to file from the procedure and then use ODI to parse this and spit it out in the stage log. I don't like this approach for two reasons:
    1) Our DBAs quite rightly get very itchy with the privs required for writing to files, and another app to read from the same
    2) It's messy :)
    Any ideas?
    thanks, Robin.

    Robin
    I don't know ODI. However if you are calling a stored proc procA and you have control over what you call, at the very least you could write a wrapper procB as
    CREATE OR REPLACE PROCEDURE PROCB (parms)
    AS
    BEGIN
    SYS.DBMS_MONITOR.SESSION_TRACE_ENABLE();
    MYUSER.PROCA(parms);
    SYS.DBMS_MONITOR.SESSION_TRACE_DISABLE();
    END;
    / If ODI sets service,module and action (as it should) then you could ask the DBA to set SERV_MOD_ACT_TRACE_ENABLE instead.
    Niall Litchfield
    http://www.orawin.info/

Maybe you are looking for