XML to varchar2

Hi all
I am having a qry which is returning the results as ORAXML. Now I ve to convert this oraxml to varchar2. How can i do that . Any idea about casting it to varchar2.
Thanks in advance
Upmish

ORAXML is XMLTYPE.
example:
create function return_xmltype return xmltype
is
v_xml xmltype;
begin
select xmlelement("SIMPLE",'example') into v_xml from dual;
return v_xml;
end;
--complile
select return_xmltype from dual;
it will return a ORAXML column, at least it does in SQL Navigator.
one way to convert to varchar is as the other post said:
-- select return_xmltype.getstringval() from dual;
or returning a clob and then converting to to_char, althow clob is already alot of chars.
-- select to_char(return_xmltype.getclobval()) from dual;
or modify the function to do this:
create function return_xmltype return clob
is
v_xml clob;
begin
select xmlelement("SIMPLE",'example') into v_xml from dual;
return v_xml;
end;
--now it returns a clob
i have alot of other examples if you need them.
I hope we helped you.
Cheers.

Similar Messages

  • Convert an XML to VARCHAR2 in 8I.?

    How do I convert a CLOB to a VARCHAR in 8I.
    I have a CLOB variable called sdiXML which contains
    XML Data.This XML is huge.
    I'd like to convert this to VARCHAR2.
    So I am using:
    l_amt  pls_integer := 30000;
    l_idx  pls_integer := 1;
    v_xml VARCHAR2(30000):= dbms_lob(sdiXML,l_amt,l_idx);It compiles but on execution,this error is displayed:
    ERROR at line 1:
    ORA-20001: ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "RIMS.SDIEXTRACTAPI", line 636Is there a way to do it?

    v_xml CLOB;
    l_amt  pls_integer := 3000;
    l_idx  pls_integer := 1;
    v_txt VARCHAR2(32767);
    Begin
      /* Works if i hardcode v_txt *
        v_txt :=
       '<?xml version = ''1.0''?><SDIEXTRACT>' ||
       <SDI><SDIOWNER>THEIRS</SDIOWNER><CONFIRM_ONLY_FLAG>'   ||
           'N</CONFIRM_ONLY_FLAG></SDI></SDIEXTRACT>';
       /* doesnt work here */
       v_txt:=dbms_lob.substr(sdiXML,l_amt,l_idx);
       DBMS_LOB.CREATETEMPORARY (v_xml, TRUE,DBMS_LOB.SESSION);
       BMS_LOB.WRITEAPPEND (v_xml, LENGTH (v_txt), v_txt);

  • Formatting XML into VARCHAR2

    Hi,
    I am looking at an XML file/feed, and within it there are paragraphs and page breaks (<para>,
    ). When I'm extracting the data into a varchar2 field, i want to preserve the paragraph/break structure...
    e.g.
    SELECT   text_col
    FROM     XMLTABLE('/'
                      PASSING (xmltype('<para>This is paragraph 1.<br/>This is p1, line 1.<br/>This is p1, line 2.</para>'))
                      COLUMNS text_col VARCHAR2(1000) PATH '/'
                     );gives
    This is paragraph 1.This is p1, line 1.This is p1, line 2.What I'm after is:
    This is paragraph 1.
    This is p1, line 1.
    This is p1, line 2.Is this achievable?
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit
    Thanks.

    Hi,
    On 11g, I would use this :
    SQL> select text
      2  from xmltable(
      3       'string-join(
      4        for $i in /para/node()
      5        return
      6          typeswitch ($i)
      7            case text()      return string($i)
      8            case element(br) return "&#38;#xA;"
      9            default return ""
    10        , "")'
    11       passing xmlparse(content '<para>Line1<br/>Line2<br/>Line3</para>')
    12       columns text varchar2(2000) path '.'
    13       )
    14  ;
    TEXT
    Line1
    Line2
    Line3
    but I'm not sure it works on your version. You can try though.
    Another solution would be :
    SQL> select utl_i18n.unescape_reference(replace(x.text.getstringval(), '<br/>', '&#38;#xA;')) as text
      2  from xmltable('/para'
      3         passing xmltype('<para>Line1&amp;Line1.1<br/>Line2<br/>Line3</para>')
      4         columns text xmltype path 'node()'
      5       ) x
      6  ;
    TEXT
    Line1&Line1.1
    Line2
    Line3

  • Repository event handler doesn't work when inserting an xml-doc via ftp

    Hi,
    I want to add a 'schemaLocation'-attribute to an XML-document when I load it in the repository. Therefore, I use the precreate-repository event and created a Repository Event Handler (see code extract below).
    Everything works fine if I type the following code in SQL Plus:
    Declare
    v_return BOOLEAN;
    Begin
    v_return:=DBMS_XDB.createresource('/public/xml/test.xml', XMLType(bfilename('XMLDIR', 'test.xml'),nls_charset_id('AL32UTF8')));
    end;Unfortunately, when I try to insert an XML-document via ftp into the /public/xml folder it doesn´t work as expected and no 'schemaLocation'-attribute is added to the new resource.
    What's the reason for this strange behavior and how can I solve it?
    For your information: I use the Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
    Thank you very much for your help!!!
    Repository Event Handler code extract:_
    create or replace
    PACKAGE BODY schemalocation AS
    PROCEDURE handlePreCreate (eventObject DBMS_XEVENT.XDBRepositoryEvent) AS
    XDBResourceObj DBMS_XDBRESOURCE.XDBResource;
    var XMLType;
    l_return BOOLEAN;
    l_xmldoc dbms_xmldom.DOMDocument;
    l_docelem dbms_xmldom.DOMElement;
    l_attr dbms_xmldom.DOMAttr;
    c1 clob;
    node     dbms_xmldom.DOMNode;
    txid varchar2(100);
    dDoc DBMS_XMLDOM.DOMDocument;
    nlNodeList DBMS_XMLDOM.DOMNodeList;
    BEGIN
    XDBResourceObj := DBMS_XEVENT.getResource(eventObject);
    dbms_lob.createTemporary(c1,TRUE);
    var:=DBMS_XDBRESOURCE.getcontentxml(XDBResourceObj);
    l_xmldoc := dbms_xmldom.newDOMDocument(var);
    l_docelem := DBMS_XMLDOM.getDocumentElement(l_xmldoc);
    ------ add schemaLocation attribute
    l_attr := DBMS_XMLDOM.createAttribute(l_xmldoc, 'xsi:schemaLocation');
    DBMS_XMLDOM.setValue(l_attr, 'urn:iso:std:iso:20022:tech:xsd:sese.023.001.01 http://www.test.com/Testswift.xsd');
    l_attr := DBMS_XMLDOM.setAttributeNode(l_docelem, l_attr);
    DBMS_XMLDOM.WRITETOCLOB(l_xmldoc, c1);
    ------- get the value of the TxId-tag
    dDoc := DBMS_XMLDOM.NEWDOMDOCUMENT(c1);
    nlNodeList := DBMS_XMLDOM.GETELEMENTSBYTAGNAME(dDoc, 'TxId');
    node := DBMS_XMLDOM.ITEM(nlNodeList, 0);
    txid:= dbms_xmldom.getnodevalue(dbms_xmldom.getfirstchild(node));
    l_return:=DBMS_XDB.createresource('/public/ok/'||txid||'.xml', XMLType(c1));
    END;

    Marco,
    Here's an example of the problem :
    create or replace package handle_events
    as
      procedure handlePreCreate(p_event dbms_xevent.XDBRepositoryEvent);
    end;
    create or replace package body handle_events
    is
    procedure handlePreCreate (p_event dbms_xevent.XDBRepositoryEvent)
    is
      XDBResourceObj dbms_xdbresource.XDBResource;
      doc XMLType;
      res boolean;
    begin
      XDBResourceObj := dbms_xevent.getResource(p_event);
      doc := dbms_xdbresource.getContentXML(XDBResourceObj);
      select insertchildxml(
        doc
      , '/root'
      , '@xsi:schemaLocation'
      , 'urn:iso:std:iso:20022:tech:xsd:sese.023.001.01 http://www.test.com/Testswift.xsd'
      , 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
      into doc
      from dual;
      res := dbms_xdb.CreateResource('/public/xml/result.xml', doc);
    end;
    end;
    declare
    res boolean;
    begin
    res := dbms_xdb.CreateFolder('/public');
    res := dbms_xdb.CreateFolder('/public/tmp');
    res := dbms_xdb.CreateFolder('/public/xml');
    end;
    declare
    res            boolean;
    resconfig      xmltype;
    my_schema      varchar2(30) := 'DEV';
    resconfig_path varchar2(300) := '/public/ResConfig.xml';
    resource_path  varchar2(300) := '/public/tmp';
    begin
      resconfig  := xmltype(
    '<ResConfig xmlns="http://xmlns.oracle.com/xdb/XDBResConfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/XDBResConfig.xsd http://xmlns.oracle.com/xdb/XDBResConfig.xsd">
      <event-listeners set-invoker="true">
        <listener>
          <description>My event handler</description>
          <schema>'||my_schema||'</schema>
          <source>HANDLE_EVENTS</source>
          <language>PL/SQL</language>
          <events>
            <Pre-Create/>
          </events>
          <pre-condition>
            <existsNode>
              <XPath>/r:Resource[r:ContentType="text/xml"]</XPath>
              <namespace>xmlns:r="http://xmlns.oracle.com/xdb/XDBResource.xsd"</namespace>
            </existsNode>
          </pre-condition>
        </listener>
      </event-listeners>
      <defaultChildConfig>
        <configuration>
          <path>'||resconfig_path||'</path>
        </configuration>
      </defaultChildConfig>
    </ResConfig>'
      res := dbms_xdb.CreateResource(resconfig_path, resconfig);
      dbms_resconfig.addResConfig(resource_path, resconfig_path, null);
    end;
    /Giving the following input XML file :
    <?xml version="1.0" encoding="utf-8"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>This works :
    SQL> declare
      2    res boolean;
      3  begin
      4    res := dbms_xdb.CreateResource('/public/tmp/test.xml',
      5               xmltype(bfilename('TEST_DIR','test.xml'), nls_charset_id('AL32UTF8')));
      6  end;
      7  /
    PL/SQL procedure successfully completed.
    SQL> select XMLSerialize(document xdburitype('/public/xml/result.xml').getXML()
    as clob indent size = 2)  result
      2  from dual
      3  ;
    RESULT
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
    urn:iso:std:iso:20022:tech:xsd:sese.023.001.01 http://www.test.com/Testswift.xsd
    "/>With the same document loaded via FTP, we get :
    SQL> select XMLSerialize(document xdburitype('/public/xml/result.xml').getXML()
    as clob indent size = 2)  result
      2  from dual
      3  ;
    ERROR:
    ORA-31011: XML parsing failed
    ORA-19202: Error occurred in XML processing
    LPX-00283: document encoding is UTF-16-based but default input encoding is not
    Error at line 1
    no rows selectedand the content looks like :
    < ? x m l   v e r s i o n = " 1 . 0 "   e n c o d i n g = " u t f - 8 " ? >
    < r o o t   x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e " / >As a workaround, I've found that serializing and re-parsing the document solves the problem :
      select insertchildxml(
        xmltype(doc.getclobval())
      , '/root'
      , '@xsi:schemaLocation'
      , 'urn:iso:std:iso:20022:tech:xsd:sese.023.001.01 http://www.test.com/Testswift.xsd'
      , 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
      into doc
      from dual;
    ...We then get the expected result after FTP transfer :
    SQL> select XMLSerialize(document xdburitype('/public/xml/result.xml').getXML()
    as clob indent size = 2)  result
      2  from dual
      3  ;
    RESULT
    <?xml version="1.0" encoding="UTF-8"?>
    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
    urn:iso:std:iso:20022:tech:xsd:sese.023.001.01 http://www.test.com/Testswift.xsd
    "/>The workaround also works for the DOM version presented above.
    Any ideas?

  • Xml to oracle conversion error

    hai guys
    i am having a procedure as follows to convert xml file into oracle.
    Create or replace procedure xml(xml_doc varchar2,table_name varchar2)
    as
    v_buf varchar2(30000);
    v_insctx dbms_xmlsave.ctxtype;
    v_rows number;
    v_file varchar2(30000);
    begin
    xmldom.writetofile(xmlparser.parse(xml_doc), v_file);
    v_insctx := dbms_xmlsave.newcontext(table_name); -- get the context handle
    v_rows := dbms_xmlsave.insertxml(v_insctx,v_file); -- this inserts the document
    dbms_output.put_line(to_char(v_rows) || ' rows inserted');
    dbms_xmlsave.closecontext(v_insctx);
    end;
    Execution
    Exec xml( '/home/main/SAMPLE.xml','SAMPLE');
    I am Getting the error
    Error
    ORA-29532: Java call terminated by uncaught Java exception: java.lang.NullPointerException: name can't be null
    ORA-06512: at "SYS.XMLDOCUMENTCOVER", line 0
    ORA-06512: at "SYS.XMLDOM", line 1829
    ORA-06512: at "SCOTT.XML", line 8
    ORA-06512: at line 7
    if Any one find solution please reply
    thanks

    xmldom.writetofile(xmlparser.parse(xml_doc), v_file);You haven't assigned anything to v_file. That would seem to be a good fit with an error message complaining about names being null.
    Cheers, APC
    Blog : http://radiofreetooting.blogspot.com/

  • How to Read XML tags....

    Hi guys...
    Can any one here tell me how to read the XML tag in PL/SQL.
    In table Enquiry there are following fields.
    Id          number
    Status          varchar2(5)
    Request          XML
    Reply          XML
    Error          varchar2(10)
    Now the following XML will be in request column from the requester.
    I have to get the,
    ->request which is in BODY tag,
    ->ID number which is in from tag (its the persons unique ID to check his BILL)
    Fetch the request from the database and updates it into the REPLY field with the same syntax.
    <message>
    <to> 123 </to>
    <from>789</from>
    <body> unbill </body>
    <messagenumber> 01 </messagenumber>
    </message>
    Can any one have the solution to this, how can I read the XML tags, process & again inserts as an XML.
    Thanks.

    Maybe something like this will be a pointer...
    SQL> CREATE TABLE t AS
      2  select 1 as id, 'C' as status, XMLTYPE('<message><to>123</to><from>789</from><body>unbill</body><messagenumber>01</messagenumber></message>') as request, XMLTYPE('<reply/>') as reply, 'NO ERROR' as error from dual
      3  ;
    Table created.
    SQL>
    SQL> SELECT * from t;
            ID S
    REQUEST
    REPLY
    ERROR
             1 C
    <message><to>123</to><from>789</from><body>unbill</body><messagenumber>01</messagenumber></message>
    <reply/>
    NO ERROR
    SQL>
    SQL> UPDATE t
      2  SET reply = updateXML(request,'/message/body/text()','bill')
      3  ;
    1 row updated.
    SQL>
    SQL> SELECT * from t;
            ID S
    REQUEST
    REPLY
    ERROR
             1 C
    <message><to>123</to><from>789</from><body>unbill</body><messagenumber>01</messagenumber></message>
    <message><to>123</to><from>789</from><body>bill</body><messagenumber>01</messagenumber></message>
    NO ERROR
    SQL>

  • Validate XML with XSD

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
    with the partitioning, real application clusters, olap, data mining
    and Real Application Testing options
    Working with relational tables containing clob type columns (no XMLDB available) I'm not able to set up a simple validation example as below (supposed to return 1 confirming a successful validation).
    declare
      xmldoc xmltype;
      sb_xml xmltype;
      valid_ number;
      xmlxsd varchar2(4000) := q'~<?xml version="1.0" ?>
                                  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
                                  <xs:element name="greeting" type="xs:string" />
                                  </xs:schema>~';
      xmlxml varchar2(32767) := q'~<?xml version="1.0" ?><greeting>"HELLO !"</greeting>~';
    begin
      xmldoc := xmltype(xmlxml);
      sb_xml := xmldoc.createschemabasedxml();
      valid_ := sb_xml.isschemavalid(xmlxsd);
      dbms_output.put_line('IsSchemaValid (0=false,1=true): ' || to_char(valid_));
    end;Thanks in advance for any kind of help provided
    Etbin

    no XMLDB availablenot sure if it will work without xmldb, but you might try to use java for schema validation:
    SQL> CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "SchemaUtil"
      2  as
      3
      4  import oracle.xml.parser.schema.*;
      5  import oracle.xml.parser.v2.*;
      6  import oracle.sql.CHAR;
      7  import java.io.*;
      8
      9  public class SchemaUtil
    10  {
    11     public static String validation(CHAR xml, CHAR xsd)
    12     throws Exception
    13     {
    14        //Build Schema Object
    15        XSDBuilder builder = new XSDBuilder();
    16        byte [] docbytes = xsd.getBytes();
    17        ByteArrayInputStream in = new   ByteArrayInputStream(docbytes);
    18        XMLSchema schemadoc = (XMLSchema)builder.build(in,null);
    19        //Parse the input XML document with Schema Validation
    20        docbytes = xml.getBytes();
    21        in = new ByteArrayInputStream(docbytes);
    22        DOMParser dp  = new DOMParser();
    23        // Set Schema Object for Validation
    24        dp.setXMLSchema(schemadoc);
    25        dp.setValidationMode(XMLParser.SCHEMA_VALIDATION);
    26        dp.setPreserveWhitespace (true);
    27        StringWriter sw = new StringWriter();
    28        dp.setErrorStream (new PrintWriter(sw));
    29        try
    30        {
    31           dp.parse (in);
    32           sw.write("The input XML parsed without errors.\n");
    33        }
    34        catch (XMLParseException pe)
    35        {
    36             sw.write("Parser Exception: " + pe.getMessage());
    37          }
    38        catch (Exception e)
    39          {
    40             sw.write("NonParserException: " + e.getMessage());
    41          }
    42          return sw.toString();
    43     }
    44   }
    45  /
    Java created.
    SQL>
    SQL> create or replace function schemavalidation(xml in varchar2,xsd in varchar2)
      2  return varchar2 is language java name 'SchemaUtil.validation(oracle.sql.CHAR,oracle.sql.CHAR)
      3                   returns java.lang.String';
      4  /
    Function created.
    SQL>
    SQL> select schemavalidation('<?xml version="1.0" ?><greeting>"HELLO !"</greeting>',
      2                           '<?xml version="1.0" ?>
      3                          <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
      4                          <xs:element name="greeting" type="xs:string" />
      5                          </xs:schema>') schemavalidation from dual
      6  /
    SCHEMAVALIDATION
    The input XML parsed without errors.
    SQL>

  • Loading/breaking large files containing multiple XML documents using plsql

    Hi I have a requirement where in the client sends the multiple xml payloads/documents in a single text file. I need to load that into the xmltype varialbe. How to do this?
    I'm able to load the entire document into a clob object, here.. all the xml payloads are loaded into a single row. When I try to access this I get a error
    ORA-31001: Invalid resource handle or path name "/MobileInventoryResponse.dtd"
    ORA-06512: at "SYS.XMLTYPE", line 254
    ORA-06512: at line 1
    This error is due to the dtd present in the xml document : <!DOCTYPE MobileInventoryResponse SYSTEM "MobileInventoryResponse.dtd">
    But if I load the data into a clob after removing the doctype reference then I get the following error. Here to mulitple xml documents are loaded into a single clob row.
    ORA-31011: XML parsing failed
    ORA-19202: Error occurred in XML processing
    LPX-00209: PI names starting with XML are reserved
    Error at line 81
    ORA-06512: at "SYS.XMLTYPE", line 254
    ORA-06512: at line 1
    When try to access this by using select xmltype(x) from t
    where x is column type of clob.
    Please let me know any method or type loading the multiple xml documents by using plsql. Only plsql method. There is a way by using SAX Loader. But can it be used in plsql or its a java method of loading.
    Regards,
    Naveen
    Edited by: MAN on Oct 18, 2008 9:21 PM

    sorry for that...
    There was enter character between some tags. From there I'm not receiving that particular error.
    Now what I get is
    ORA-31001: Invalid resource handle or path name "/MobileInventoryResponse.dtd"
    ORA-06512: at "SYS.XMLTYPE", line 254
    ORA-06512: at line 1
    ORA-06512: at line 39
    This is because there is a doctype at the start of the xml payload.
    But if there is no <!DOCTYPE MobileInventoryResponse SYSTEM "MobileInventoryResponse.dtd"> this statement then it works fine.
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE MobileInventoryResponse SYSTEM "MobileInventoryResponse.dtd">
    <MobileInventoryResponse>
    And this exercise I'm doing in my Windows xp loaded operating system with a local instance of oracle ... Do i need to do any other setting.
    Along with that I followed your method mentioned @ Re: LPX-00209: PI names starting with XML are reserved
    ignore:=dbms_xdb.createResource('/MobileInventoryResponse.dtd',bfilename('XML_DIR','MobileInventoryResponse.dtd'));
    And I'm not getting how it will refer the this resource.
    this above partilcular statement . should it be executed when ever we insert into the table ? But in the dtd there is no word saying "MobileInventoryResponse".
    got this error.
    ORA-31011: XML parsing failed
    ORA-19202: Error occurred in XML processing
    LPX-00104: Warning: element "MobileInventoryResponse" is not declared in the DTD
    Error at line 1
    ORA-06512: at "SYS.XMLTYPE", line 254
    ORA-06512: at line 1
    ORA-06512: at line 21
    This is how I'm doing in the block
    DECLARE
    l_filehandle UTL_FILE.FILE_TYPE;
    l_filename VARCHAR2(50):='test.xml';
    l_rec_data VARCHAR2(500);
    l_rec_trim_data VARCHAR2(500);
    l_rec_trim_upper VARCHAR2(500);
    l_rec_full_data CLOB;
    ignore boolean;
    BEGIN
    l_filehandle := UTL_FILE.FOPEN('XML_DIR',l_filename,'R');
    --dbms_xdb.deleteResource('/MobileInventoryResponse.dtd',dbms_xdb.DELETE_RESOURCE   );
    LOOP
    ignore:=dbms_xdb.createResource('/MobileInventoryResponse.dtd',bfilename('XML_DIR','MobileInventoryResponse.dtd'));
    commit;
    UTL_FILE.GET_LINE(l_filehandle, l_rec_data);
    --dbms_output.put_line('l_rec_data : '|| l_rec_data);
    -- Trim the record to remove spaces
    l_rec_trim_data := TRIM(l_rec_data);
    l_rec_trim_upper := UPPER(l_rec_trim_data);
    l_rec_full_data := l_rec_full_data||l_rec_data;
    IF l_rec_trim_upper LIKE '</MOBILEINVENTORYRESPONSE>' THEN
    dbms_output.put_line('l_rec_full_data : '||l_rec_full_data);
    INSERT INTO library_xml VALUES(xmltype(l_rec_full_data));
    l_rec_full_data:=NULL;
    END IF;
    dbms_xdb.deleteResource('/MobileInventoryResponse.dtd',dbms_xdb.DELETE_RESOURCE );
    commit;
    END LOOP;
    UTL_FILE.FCLOSE(l_filehandle);
    COMMIT;
    --exception just for testing purpose
    EXCEPTION
    WHEN no_data_found THEN
    NULL;
    commit;
    END;
    Edited by: MAN on Oct 21, 2008 2:47 AM

  • Calling BI Publisher Web Service from pl/sql

    I am trying to call the BI publisher web service from pl/sql.
    I get the following response back
    <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
    <soapenv:Fault>
    <faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode>
    <faultstring>no SOAPAction header!</faultstring>
    <detail>
    <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">my-obiee</ns2:hostname>
    </detail>
    </soapenv:Fault>
    </soapenv:Body>
    </soapenv:Envelope>
    The bit that concerns me is
    <faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode>
    <faultstring>no SOAPAction header!</faultstring>
    The code that I used to call this is
    DECLARE
    req utl_http.req;
    resp utl_http.resp;
    value VARCHAR2(1024);
    p_data_type varchar2(4000):= 'application/soap+xml;';
    p_data_in VARCHAR2(3000) :=
    '<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pub="http://xmlns.oracle.com/oxp/service/PublicReportService">
    <soapenv:Body>
    <pub:scheduleReport xmlns:pub="http://xmlns.oracle.com/oxp/service/PublicReportService">
    <scheduleRequest>
    <deliveryRequest>
    <ftpOption>
    <ftpServerName>ino-ed-oel2.inoapps.com</ftpServerName>
    <ftpUserName>*******</ftpUserName>
    <ftpUserPassword>*****</ftpUserPassword>
    <remoteFile>/opt/UAT/db/tech_st/11.1.0/employees.pdf</remoteFile>
    </ftpOption>
    </deliveryRequest>
    <reportRequest>
    <attributeFormat>pdf</attributeFormat>
    <reportAbsolutePath>http://10.100.100.44:9704/xmlpserver/~administrator/XXXXXXX.xdo</reportAbsolutePath>
    <parameterNameValues>
    <item>
    <name>dname</name>
    <multiValuesAllowed>false</multiValuesAllowed>
    <values>
    <item>153002</item>
    </values>
    </item>
    </parameterNameValues>
    </reportRequest>
    <userJobName>BILL</userJobName>
    </scheduleRequest>
    <userID>******</userID>
    <password>******</password>
    </pub:scheduleReport>
    </soapenv:Body>
    </soapenv:Envelope>';
    BEGIN
    --utl_http.set_proxy('proxy.my-company.com', 'corp.my-company.com');
    req := utl_http.begin_request('http://10.100.100.44:9704/xmlpserver/services/PublicReportService?wsdl', 'POST');
    utl_http.set_header(req, 'content-type', p_data_type);
    utl_http.set_header(req, 'content-length', length(p_data_in));
    utl_http.set_header(req, 'User-Agent', 'Mozilla/4.0');
    utl_http.write_text(req, p_data_in);
    resp := utl_http.get_response(req);
    dbms_output.put_line ('status code: ' || resp .status_code);
    dbms_output.put_line ('reason phrase: ' || resp .reason_phrase);
    LOOP
    utl_http.read_line(resp, value, TRUE);
    dbms_output.put_line(value);
    END LOOP;
    utl_http.end_response(resp);
    EXCEPTION
    WHEN utl_http.end_of_body THEN
    utl_http.end_response(resp);
    END;
    Any help would be greatly received

    I had the same problem this morning. You need to add a line to the HTTP header to declare a value for SOAPAction.
    You can set this as an empty string, but for some reason it is required.
    Try adding this among your header declarations:
    utl_http.set_header(req, 'SOAPAction', '');

  • Arabic characters not displaying in Forms

    Problem :
    I have a xml in the unix server machine and I try to read that xml file through a dba job which is using simple utl_file functionality.
    To read the file and put in a table of column CLOB.
    I'm checking it from front end Oracle 10g form 's text item , I'm getting junk characters like ???????
    I tried to check whether the data stored in db is correct by running below program to generate message to the text file
    BEGIN
    for x in (
    select message from tb_xml_in where xml_sr_no='123'
    loop
       clob_to_file( '/test/debug/',
       'test' || '.txt',
       x.message );
    end loop;
    END;I transferred the test.txt from unix and checked in notepad of my machine where Arabic character is enabled
    and it is showing me Arabic character.
    Which means its storing correct in db but not able to show it correct in through FMB.
    Database details:
    NLS parameter is
    NLS_LANGUAGE          AMERICAN
    NLS_TERRITORY          AMERICA
    NLS_NCHAR_CONV_EXCP     FALSE
    NLS_CHARACTERSET     AR8MSWIN1256
    NLS_NCHAR_CHARACTERSET     AL16UTF16
    NLS_LENGTH_SEMANTICS     BYTE
    NLS_RDBMS_VERSION     10.2.0.4.0
    select * from V$NLS_VALID_VALUES where parameter = 'CHARACTERSET' and value like '%UTF%';
    PARAMETER     VALUE          ISDEPRECATED
    CHARACTERSET     AL24UTFFSS     TRUE
    CHARACTERSET     UTF8          FALSE
    CHARACTERSET     UTFE          FALSE
    CHARACTERSET     AL32UTF8     FALSE
    CHARACTERSET     AL16UTF16     FALSE
    select * from V$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
    PL/SQL Release 10.2.0.4.0 - Production
    CORE    10.2.0.4.0      ProductionChanging NLS Characterset of db is not currently recommended as the production database is very huge.
    Can you please help on how i can resolve this issue.

    even though the NLS_LANG is AMERICAN_AMERICA.US7ASCII in formconfig.
    My utl_file.Get_line not reading arabic character in my xml file.
    since my incoming xml is in UTF8 format, I used following code to read xml as raw data type and converting format from UTF8 to database format(i.e., Arabic) and I'm able to see Arabic from front end
    DECLARE
    v_Data1 varchar2(32767 BYTE);
    v_Data2 varchar2(32767 BYTE);
    v_Raw1 raw(32767);
    v_Targetcharset varchar2(40 BYTE);
    v_Dbcharset varchar2(40 BYTE);
    v_inf UTL_FILE.FILE_TYPE;
    l_UTL_DIR varchar2(1000) := '/test/arabic/in/xml/';
    v_Filecharset varchar2(100);
    v_nchar NVARCHAR2(4000);
    BEGIN
    v_Filecharset := 'AMERICAN_AMERICA.AL32UTF8' ;
    v_Dbcharset:= 'ARABIC_UNITED ARAB EMIRATES.AR8MSWIN1256' ;
    dbms_output.put_line('here1');
    V_Inf := UTL_FILE.FOPEN(l_UTL_DIR,'testing.xml', 'R',32767);
    dbms_output.put_line('here2');
    UTL_FILE.GET_RAW(V_inf, v_Raw1, 2000);
    dbms_output.put_line('here3');
    v_Raw1 := UTL_RAW.CONVERT (v_Raw1,v_Dbcharset,v_Filecharset);
    dbms_output.put_line('here5');
    v_Data2 := utl_raw.cast_to_varchar2 (v_Raw1);
    dbms_output.put_line('here6');
    update sample_test set sample_col1 = v_Data2
    where sample_col2 ='XXXXX';
    UTL_FILE.FClose(v_inf);
    commit;
    EXCEPTION
    WHEN OTHERS THEN
         dbms_output.put_line('SQLERRM ='||SQLERRM);
    End;
    /Edited by: Leonard on Aug 31, 2012 4:32 AM

  • FBI not used in xmlquery

    G'day all,
    Running the following set-up: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    Getting a full table scan on a table with an FBI.
    Here is a sample set-up:
    create table a (id number, filepath varchar2(256 char));
    insert into a values(1,'/dir/subdir/file1.xml');
    insert into a values(2,'/dir/subdir/file2.xml');
    insert into a values(3,'/dir/subdir/file3.xml');
    insert into a values(4,'/dir/subdir/file4.xml');
    insert into a values(5,'/dir/subdir/file5.xml');
    commit;
    create index filepath_substr_fbi on a(substr(filepath,instr(filepath,'/',-1)+1));
    create unique index filepath_uidx on a(filepath);So the requirement is to retrieve the ids from the table containing a particular filename. The filenames to retrieve are sourced from an xmltype. The approach I've taken is the following:
    select * from a , (XMLTable('for $j in /task/related_files/ora:tokenize(text(),"\|")
    where ora:matches($j,"\d+\.xml") return normalize-space($j)'
        PASSING xmltype(
      '<task><related_files>File 1|file1.xml|file 2|file2.xml|file 3|file3.xml</related_files></task>'
      ))) x  where substr(a.filepath,instr(a.filepath,'/',-1)+1) = x.column_value.getstringval();which returns the following results:
    "ID"     "FILEPATH"     "COLUMN_VALUE"
    1     "/dir/subdir/file1.xml"     file1.xml
    2     "/dir/subdir/file2.xml"     file2.xml
    3     "/dir/subdir/file3.xml"     file3.xmlNow, after running this sample, and doing an explain plan on it, I did notice it used the index!
    Execution Plan
    Plan hash value: 107833345
    | Id  | Operation                           | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                    |                       |   408 |   109K|    32   (4)| 00:00:01 |
    |   1 |  MERGE JOIN                         |                       |   408 |   109K|    32   (4)| 00:00:01 |
    |   2 |   TABLE ACCESS BY INDEX ROWID       | A                     |     5 |  1365 |     2   (0)| 00:00:01 |
    |   3 |    INDEX FULL SCAN                  | FILEPATH_SUBSTR_FBI   |     5 |       |     1   (0)| 00:00:01 |
    |*  4 |   SORT JOIN                         |                       |   408 |   816 |    30   (4)| 00:00:01 |
    |*  5 |    COLLECTION ITERATOR PICKLER FETCH| XQSEQUENCEFROMXMLTYPE |   408 |   816 |    29   (0)| 00:00:0
    Predicate Information (identified by operation id):
       4 - access(SUBSTR("FILEPATH",INSTR("FILEPATH",'/',(-1))+1)="XMLTYPE"."GETSTRINGVAL"(XMLCDATA(SYS_
                  QNORMSPACE(SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0)),1)))
           filter(SUBSTR("FILEPATH",INSTR("FILEPATH",'/',(-1))+1)="XMLTYPE"."GETSTRINGVAL"(XMLCDATA(SYS_
                  QNORMSPACE(SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0)),1)))
       5 - filter( REGEXP_LIKE (SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0),'\d+\.xml'))
    Note
       - dynamic sampling used for this statement (level=2)Now for some reason, my actual code (which is not much different than sample above)..gets the following plan:
    Execution Plan
    Plan hash value: 1696443977
    | Id  | Operation                          | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                   |                       |   449 | 53431 |    33   (4)| 00:00:01 |
    |*  1 |  HASH JOIN                         |                       |   449 | 53431 |    33   (4)| 00:00:01 |
    |   2 |   TABLE ACCESS FULL                | DATA_CAPTURE_RECORD   |    11 |  1287 |     3   (0)| 00:00:01 |
    |*  3 |   COLLECTION ITERATOR PICKLER FETCH| XQSEQUENCEFROMXMLTYPE |   408 |   816 |    29   (0)| 00:00
    Predicate Information (identified by operation id):
       1 - access(SUBSTR("DRAFT_VPATH",INSTR("DRAFT_VPATH",'/',(-1))+1)="XMLTYPE"."GETSTRINGVAL"(XMLCDAT
                  A(SYS_XQNORMSPACE(SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0)),1)))
       3 - filter( REGEXP_LIKE (SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0),'\d+\.xml'))Here is the sql query for the above plan:
    select * from data_capture_record x, (XMLTable('for $j in /task/related_tasks/ora:tokenize(text(),"\|")
    where ora:matches($j,"\d+\.xml") return normalize-space($j)'
        PASSING xmltype(
      '<task><related_tasks>Actioning a Reminder Work Item or a BFd Action Item Work Item for Jury Service - clean up this Edit - another Edit | 17.xml| ROE Correct WI Received for a Regular ROE s | 24.xml| Sending benefit statement copies that are currently archived . | 10.xml| Test of TINY MCE Configurations - Test Edit. | 46.xml|</related_tasks> </task>'
      ))) a  where substr(x.DRAFT_VPATH,instr(x.DRAFT_VPATH,'/',-1)+1) = a.column_value.getstringval();Any ideas? A quick note, i just started getting into xquery this week..so if you spot something, or see a better solution to my problem, please let me know...
    Thanks for any help or advice.
    Stephane

    Indeed, cardinality and selectivity are essential in this case.
    Consider the following test case with a 1,000,000-row table, the CBO picks up the index :
    Connected to:
    Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
    SQL> create table test2 as
      2  select level as path_id
      3      , cast('/dir/subdir/file'||to_char(level,'fm0999999')||'.xml' as varchar2(256)) as filepath
      4  from dual
      5  connect by level <= 1000000 ;
    Table created.
    SQL> select count(*) from test2;
      COUNT(*)
       1000000
    SQL> create index test2_ix on test2 ( substr(filepath, instr(filepath, '/', -1) + 1) );
    Index created.
    SQL> exec dbms_stats.gather_table_stats(user, 'TEST2');
    PL/SQL procedure successfully completed.
    SQL> set lines 120
    SQL> set autotrace on explain
    SQL> select *
      2  from test2 t
      3  where substr(filepath, instr(filepath, '/', -1) + 1) in (
      4    select filename
      5    from xmltable(
      6           'for $i in ora:tokenize(/task/related_files, "\|")
      7            where ora:matches($i, "\d+\.xml")
      8            return normalize-space($i)'
      9           passing xmlparse(document '<task><related_files>File 1| file0000001.xml|file 2|file0999999.xml |file 3|file0007773.xml</related_files></
    task>')
    10           columns filename varchar2(30) path '.'
    11         ) x
    12  ) ;
       PATH_ID FILEPATH
             1 /dir/subdir/file0000001.xml
          7773 /dir/subdir/file0007773.xml
        999999 /dir/subdir/file0999999.xml
    Execution Plan
    Plan hash value: 420041503
    | Id  | Operation                           | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                    |                       |   257 | 13107 |   643   (1)| 00:00:08 |
    |   1 |  NESTED LOOPS                       |                       |   257 | 13107 |   643   (1)| 00:00:08 |
    |   2 |   SORT UNIQUE                       |                       |   408 |   816 |    29   (0)| 00:00:01 |
    |*  3 |    COLLECTION ITERATOR PICKLER FETCH| XQSEQUENCEFROMXMLTYPE |   408 |   816 |    29   (0)| 00:00:01 |
    |   4 |   TABLE ACCESS BY INDEX ROWID       | TEST2                 |     1 |    49 |     3   (0)| 00:00:01 |
    |*  5 |    INDEX RANGE SCAN                 | TEST2_IX              |     1 |       |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       3 - filter( REGEXP_LIKE (SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0),'\d+\.xml'))
       5 - access(SUBSTR("FILEPATH",INSTR("FILEPATH",'/',-1)+1)=CAST(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(SYS_XQ
                  _PKSQL2XML(SYS_XQNORMSPACE(SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0)),1,2,0),0,0,20971520,0),50,1,2) AS
                  varchar2(30) ))
    Note
       - Unoptimized XML construct detected (enable XMLOptimizationCheck for more information)
    SQL> select t.*
      2  from test2 t
      3       join xmltable(
      4         'for $i in ora:tokenize(/task/related_files, "\|")
      5          where ora:matches($i, "\d+\.xml")
      6          return normalize-space($i)'
      7         passing xmlparse(document '<task><related_files>File 1| file0000001.xml|file 2|file0999999.xml |file 3|file0007773.xml</related_files></ta
    sk>')
      8         columns filename varchar2(30) path '.'
      9       ) x
    10       on substr(t.filepath, instr(t.filepath, '/', -1) + 1) = x.filename
    11  ;
       PATH_ID FILEPATH
             1 /dir/subdir/file0000001.xml
        999999 /dir/subdir/file0999999.xml
          7773 /dir/subdir/file0007773.xml
    Execution Plan
    Plan hash value: 1810535419
    | Id  | Operation                          | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                   |                       |   411 | 20961 |  1254   (1)| 00:00:16 |
    |   1 |  NESTED LOOPS                      |                       |   411 | 20961 |  1254   (1)| 00:00:16 |
    |*  2 |   COLLECTION ITERATOR PICKLER FETCH| XQSEQUENCEFROMXMLTYPE |   408 |   816 |    29   (0)| 00:00:01 |
    |   3 |   TABLE ACCESS BY INDEX ROWID      | TEST2                 |     1 |    49 |     3   (0)| 00:00:01 |
    |*  4 |    INDEX RANGE SCAN                | TEST2_IX              |     1 |       |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - filter( REGEXP_LIKE (SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0),'\d+\.xml'))
       4 - access(SUBSTR("FILEPATH",INSTR("FILEPATH",'/',-1)+1)=CAST(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(SYS_X
                  Q_PKSQL2XML(SYS_XQNORMSPACE(SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0)),1,2,0),0,0,20971520,0),50,1,2)
                  AS varchar2(30) ))
    Note
       - Unoptimized XML construct detected (enable XMLOptimizationCheck for more information)From the plans above we see that the CBO estimates 408 rows from XMLTable.
    This estimation could be refined by using hints : CARDINALITY (not documented), DYNAMIC_SAMPLING, or by using a wrapper function and the extensible optimizer feature.
    For example, if you expect at most 10 rows every time :
    SQL> select /*+ cardinality(x 10) */ t.*
      2  from test2 t
      3       join xmltable(
      4         'for $i in ora:tokenize(/task/related_files, "\|")
      5          where ora:matches($i, "\d+\.xml")
      6          return normalize-space($i)'
      7         passing xmlparse(document '<task><related_files>File 1| file0000001.xml|file 2|file0999999.xml |file 3|file0007773.xml</related_files></ta
    sk>')
      8         columns filename varchar2(30) path '.'
      9       ) x
    10       on substr(t.filepath, instr(t.filepath, '/', -1) + 1) = x.filename
    11  ;
       PATH_ID FILEPATH
             1 /dir/subdir/file0000001.xml
        999999 /dir/subdir/file0999999.xml
          7773 /dir/subdir/file0007773.xml
    Execution Plan
    Plan hash value: 1810535419
    | Id  | Operation                          | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT                   |                       |    10 |   510 |    59   (0)| 00:00:01 |
    |   1 |  NESTED LOOPS                      |                       |    10 |   510 |    59   (0)| 00:00:01 |
    |*  2 |   COLLECTION ITERATOR PICKLER FETCH| XQSEQUENCEFROMXMLTYPE |    10 |    20 |    29   (0)| 00:00:01 |
    |   3 |   TABLE ACCESS BY INDEX ROWID      | TEST2                 |     1 |    49 |     3   (0)| 00:00:01 |
    |*  4 |    INDEX RANGE SCAN                | TEST2_IX              |     1 |       |     2   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - filter( REGEXP_LIKE (SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0),'\d+\.xml'))
       4 - access(SUBSTR("FILEPATH",INSTR("FILEPATH",'/',-1)+1)=CAST(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(SYS_X
                  Q_PKSQL2XML(SYS_XQNORMSPACE(SYS_XQ_UPKXML2SQL(VALUE(KOKBF$),2,1,0)),1,2,0),0,0,20971520,0),50,1,2)
                  AS varchar2(30) ))
    Note
       - Unoptimized XML construct detected (enable XMLOptimizationCheck for more information)

  • Extracting Attrubutes using DOM API (I need help!!!!)

    Hi,
    I need some help on how to extract (or parse) the Attributes value in the XML using the DBMS_XMLDOM package.
    Here is the XML sample.
    <COMPANY>
    <DEPARTMENT DEPT="10">
    <EMP ID="123" NAME="JOHN" />
    <EMP ID="456" NAME="PETER" />
    <EMP ID="789" NAME="PAUL" />
    </DEPARTMENT>
    <DEPARTMENT DEPT="20">
    <EMP ID="987" NAME="SIMON" />
    <EMP ID="654" NAME="JAMES" />
    <EMP ID="321" NAME="ANDREW" />
    </DEPARTMENT>
    <DEPARTMENT DEPT="30">
    <EMP ID="129" NAME="JOHN" />
    <EMP ID="348" NAME="PETER" />
    <EMP ID="567" NAME="PAUL" />
    </DEPARTMENT>
    </COMPANY>
    BTW, we are using Oracle v9.2.0.4.0
    Thanks in advance

    The following procedure may help...
    procedure uploadFiles(FILE_LIST varchar2 default 'ls.xml', UPLOAD_DIRECTORY_NAME varchar2 default USER, REPOSITORY_FOLDER_PATH varchar2 default '/home/' || USER , BATCH_SIZE number default 1)
    as
    pathSeperator varchar2(1) := '/';
    DIRECTORY_PATH varchar2(256);
    SUBDIRECTORY_PATH varchar2(256);
    TARGET_FOLDER_PATH varchar2(256);
    TARGET_FILE_PATH varchar2(256);
    TARGET_FILE_NAME varchar2(256);
    RESOURCE_PATH varchar2(256);
    LAST_FOLDER_PATH varchar2(256) := ' ';
    sqlStatement varchar2(256);
    FILELIST_XML XMLTYPE := XMLType(bfilename(UPLOAD_DIRECTORY_NAME,FILE_LIST),nls_charset_id('AL32UTF8'));
    CONTENT_XML XMLType;
    result boolean;
    filecount binary_integer := 0;
    FILELIST_DOM DBMS_XMLDOM.DOMDOCUMENT;
    FILES_NL DBMS_XMLDOM.DOMNODELIST;
    DIRECTORY_NL DBMS_XMLDOM.DOMNODELIST;
    FILENAME_NL DBMS_XMLDOM.DOMNODELIST;
    FILES_NODE DBMS_XMLDOM.DOMNODE;
    DIRECTORY_NODE DBMS_XMLDOM.DOMNODE;
    FILE_NODE DBMS_XMLDOM.DOMNODE;
    TEXT_NODE DBMS_XMLDOM.DOMNODE;
    ENCODING_ATTR DBMS_XMLDOM.DOMATTR;
    REPLACE_ATTR DBMS_XMLDOM.DOMATTR;
    PATH VARCHAR2(256);
    FILE_NAME VARCHAR2(256);
    ENCODING_TEXT VARCHAR2(32);
    ATTR_VALUE VARCHAR2(256);
    REPLACE_OPTION BOOLEAN;
    REPLACE_DEFAULT BOOLEAN;
    DEBUG_BUFFER VARCHAR2(255);
    begin
    -- Create the set of Folders in the XDB Repository
    FILELIST_DOM := DBMS_XMLDOM.newDOMDocument(FILELIST_XML);
    DIRECTORY_NL := DBMS_XMLDOM.GETELEMENTSBYTAGNAME(FILELIST_DOM,'directory');
    FOR i in 0 .. (DBMS_XMLDOM.GETLENGTH(DIRECTORY_NL) - 1) LOOP
    DIRECTORY_NODE := DBMS_XMLDOM.ITEM(DIRECTORY_NL,i);
    TEXT_NODE := DBMS_XMLDOM.GETFIRSTCHILD(DIRECTORY_NODE);
    DIRECTORY_PATH := DBMS_XMLDOM.GETNODEVALUE(TEXT_NODE);
    DIRECTORY_PATH := REPOSITORY_FOLDER_PATH || DIRECTORY_PATH;
    createDirectoryTree(DIRECTORY_PATH);
    END LOOP;
    -- Find the Local File System Path to the target Directory.
    select DIRECTORY_PATH
    into DIRECTORY_PATH
    from ALL_DIRECTORIES
    where DIRECTORY_NAME = UPLOAD_DIRECTORY_NAME;
    -- dbms_output.put_line('OS Root = ' || DIRECTORY_PATH);
    -- Load the Resources into the XML DB Repository
    FILES_NL := DBMS_XMLDOM.GETELEMENTSBYTAGNAME(FILELIST_DOM,'files');
    FILES_NODE := DBMS_XMLDOM.ITEM(FILES_NL,0);
    REPLACE_DEFAULT := FALSE;
    REPLACE_ATTR := DBMS_XMLDOM.getAttributeNode(DBMS_XMLDOM.MAKEELEMENT(FILES_NODE),'replace');
    if not (DBMS_XMLDOM.ISNULL(REPLACE_ATTR)) then
    REPLACE_DEFAULT := xdb_dom_helper.varchar_to_boolean(DBMS_XMLDOM.getVALUE(REPLACE_ATTR));
    end if;
    FILENAME_NL := DBMS_XMLDOM.GETELEMENTSBYTAGNAME(FILELIST_DOM,'file');
    FOR i in 0 .. (DBMS_XMLDOM.GETLENGTH(FILENAME_NL) - 1) LOOP
    FILE_NODE := DBMS_XMLDOM.ITEM(FILENAME_NL,i);
    TEXT_NODE := DBMS_XMLDOM.GETFIRSTCHILD(FILE_NODE);
    TARGET_FILE_PATH := DBMS_XMLDOM.GETNODEVALUE(TEXT_NODE);
    -- dbms_output.put_line('Source = ' || TARGET_FILE_PATH);
    TARGET_FILE_NAME := substr(TARGET_FILE_PATH,instr(TARGET_FILE_PATH,pathSeperator,-1)+1);
    -- dbms_output.put_line('File = ' || TARGET_FILE_NAME);
    TARGET_FOLDER_PATH := substr(TARGET_FILE_PATH,1,instr(TARGET_FILE_PATH,pathSeperator,-1));
    TARGET_FOLDER_PATH := substr(TARGET_FOLDER_PATH,instr(TARGET_FOLDER_PATH,pathSeperator));
    TARGET_FOLDER_PATH := substr(TARGET_FOLDER_PATH,1,length(TARGET_FOLDER_PATH)-1);
    ENCODING_ATTR := DBMS_XMLDOM.getAttributeNode(DBMS_XMLDOM.MAKEELEMENT(FILE_NODE),'encoding');
    ENCODING_TEXT := 'AL32UTF8';
    if not (DBMS_XMLDOM.ISNULL(ENCODING_ATTR)) then
    ENCODING_TEXT := DBMS_XMLDOM.getValue(ENCODING_ATTR);
    dbms_output.put_line('Encoding for ' || TARGET_FILE_NAME || ' = ' || ENCODING_TEXT);
    end if;
    REPLACE_ATTR := DBMS_XMLDOM.getAttributeNode(DBMS_XMLDOM.MAKEELEMENT(FILE_NODE),'Replace');
    REPLACE_OPTION := REPLACE_DEFAULT;
    if not (DBMS_XMLDOM.ISNULL(REPLACE_ATTR)) then
    REPLACE_OPTION := xdb_dom_helper.varchar_to_boolean(DBMS_XMLDOM.getValue(REPLACE_ATTR));
    end if;
    if (LAST_FOLDER_PATH != TARGET_FOLDER_PATH) then
    SUBDIRECTORY_PATH := DIRECTORY_PATH || TARGET_FOLDER_PATH;
    -- dbms_output.put_line('Directory = ' || SUBDIRECTORY_PATH);
    sqlStatement := 'create or replace directory SUBDIR as ''' || SUBDIRECTORY_PATH || '''';
    execute immediate sqlStatement;
    LAST_FOLDER_PATH := TARGET_FOLDER_PATH;
    end if;
    CONTENT_XML := xmltype(bfilename('SUBDIR',TARGET_FILE_NAME),nls_charset_id(ENCODING_TEXT));
    RESOURCE_PATH := REPOSITORY_FOLDER_PATH || TARGET_FOLDER_PATH || '/' || TARGET_FILE_NAME;
    -- dbms_output.put_line('Target = ' || RESOURCE_PATH);
    if (REPLACE_OPTION and dbms_xdb.existsResource(RESOURCE_PATH)) then
    dbms_xdb.deleteResource(RESOURCE_PATH);
    end if;
    result := dbms_xdb.createResource(RESOURCE_PATH,CONTENT_XML);
    filecount := filecount + 1;
    if (filecount = BATCH_SIZE) then
    filecount := 0;
    commit;
    end if;
    END LOOP;
    end;
    For instance code to get an 'encoding' attribute from a 'file' element

  • Error: wrong number or types of arguments

    Getting the following error:-
    wrong number or types of arguments in call to 'XMLTYPE'
    with the following insert statement:-
    INSERT INTO com_xml(name,content)
    VALUES (V_FILENAME,XMLType(bfilename('EMAIL_ATTACH', 'JobInstructions.xml')));
    Any ideas for a fix folks?

    hi guys
    managed a work around with utl_file
    DECLARE
    V_FILENAME VARCHAR2(20):= 'JobInstructions.xml';
    V_PATH     VARCHAR2(100):= '/oracle/attachments';
    +V_XML      CLOB;                 --HOLDS THE CONTENTS OF THE XML FILE TO BE INSERTED IN TO THE DATABASE+
    +VNEWLINE   VARCHAR2(200):= '';   --HOLDS THE LINE TO INSERTED IN TO V_xml+
    +VSFILE     utl_file.file_type;   --HOLDS THE FILE+
    BEGIN
    VSFile := utl_file.fopen(V_PATH, V_FILENAME,'r');
    IF utl_file.is_open(VSFILE) THEN
    LOOP
    BEGIN
    utl_file.get_line(VSFILE, vNewLine);
    IF vNewLine IS NULL THEN
    EXIT;
    ELSE
    V_XML := V_XML||vNewLine;
    END IF;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    EXIT;
    END;
    END LOOP;
    END IF;
    --insert the file into com_xml+
    --INSERT THE FILE CONTENTS+
    INSERT INTO COM_XML(name,content)
    VALUES ('STEW',XMLType(V_XML));
    end;

  • LDAP Authintication invalid ACL

    Dear All,
    i am using apex 4.2 with latest apex listner,oracle database 11g R2 64 bit, windows 7, internet explorer 9.
    i want to configure ldap authintication.
    i am following the following blog
    http://ruepprich.wordpress.com/2012/11/02/ldap-authentication-with-apex/
    i am stuck with the following line
    l_principal VARCHAR2(30) := 'APEX_040100'; -- upper case
    i have created the same trigger like below
    DECLARE
    l_acl VARCHAR2(100) := 'ldapacl2.xml';
    l_desc VARCHAR2(100) := 'LDAP Authentication for ldap.hctsrvpdc01.hct.org';
    l_principal VARCHAR2(30) := 'APEX_040100'; -- upper case
    l_host VARCHAR2(100) := 'ldap.hctsrvpdc01.hct.org';
    BEGIN -- Create the new ACL. -- Also, provide one starter privilege, granting the schema the privilege to connect.
    dbms_network_acl_admin.create_acl(l_acl, l_desc, l_principal, TRUE, 'connect'); 
    -- Now grant privilege to resolve DNS names. 
    dbms_network_acl_admin.add_privilege(l_acl, l_principal, TRUE, 'resolve'); 
    -- Specify which hosts this ACL applies to.
    dbms_network_acl_admin.assign_acl(l_acl, l_host); 
    COMMIT;
    END;
    but when i run it from sysdba, it give the following error
    ERROR at line 1:
    ORA-44416: Invalid ACL: Unresolved principal 'APEX_040100'
    ORA-06512: at "SYS.DBMS_NETWORK_ACL_ADMIN", line 252
    ORA-06512: at line 7
    how to fix this issue? what is the   l_principal VARCHAR2(30) := 'APEX_040100';??? how could i sure it is  APEX_040100?
    Regards.

    thank you christian,
    but it give a new error now, actually i have configured ldap long before on this dataabse.
    the error is below.
    ERROR at line 1:
    ORA-31003: Parent /sys/acls/ already contains child entry ldapacl.xml
    ORA-06512: at "SYS.DBMS_NETWORK_ACL_ADMIN", line 252
    ORA-06512: at line 7
    kindly guide for workaround.
    regards.

  • XDB creation of folders with PL/SQL problem

    Hi Forum,
    I'm struggling with the problem of creating folders and resources automatically using PL/SQL. I'm working with Oracle 9.2
    What I'd like to achieve is a proc like so:
    create_folder(path in varchar2)
    This proc should create the folder for me. Problem is:
    1. If a subfolder is not existing, dbms_xdb.create_folder throws an error.
    2. If a folder is existing, the same happens.
    So my approach is:
    split the path '/a/b/c/d/test.xml' into chunks like:
    /a
    /a/b
    /a/b/c
    /a/b/c/d
    Now, check for each entry, whether folder exists. If not, create folder.
    The way I implemented this is by a pipelined PL/SQL function split_path:
    create type path_table as table of varchar2;
    create or replace function split_path (path in varchar2)
    return path_table pipelined
    is
    i number := 1;
    begin
    while instr(path, '/', 2, i) > 0 loop
    pipe row (substr(path, 1, instr(path, '/', 2, i) - 1));
    i := i + 1;
    end loop;
    return;
    end split_path;
    This function pumps out any sub-path.
    Now, I create a create_folder function like so:
    procedure create_folder (path in varchar2)
    is
    i number := 1;
    -- cursor for all non-existing pathes (via pipelined function split_path)
    cursor path_cur is
    select column_value
    from table(mds_tools.split_path(path))
    where column_value not in (select any_path from resource_view);
    begin
    -- Create all non-existing folders
    for entry in path_cur loop
    result := dbms_xdb.createFolder(entry.column_value);
    end loop;
    -- exception handling goes here
    end create_folder;
    So, this way, I'm checking any sub folder against the existing cursors and try to create a folder if it's not existing.
    Nice try, so far, but: It doesn't work.
    Oracle gives me an "End of communication" error, when trying to run this.
    It seems to bomb out as soon as the second pipe is pumped out of the function and I don't understand, why.
    If this should be the wrong approach, how could I improve this?
    Thanks for any help,
    Jürgen

    The createDirectoryTree procedure in the following package may help...
    -- XDB_HELPER should be created under XDBPM
    alter session set current_schema = XDBPM
    create or replace package XDB_UTILITIES_10200
    AUTHID CURRENT_USER
    as
       function getBinaryContent(file bfile) return BLOB;
       function getBinaryContent(filename varchar2, directoryName varchar2 default USER) return BLOB;
       function getBinaryContent(file bfile, tempBLOB IN OUT BLOB) return BLOB;
       function getBinaryContent(filename varchar2, directoryName varchar2 default USER, tempBLOB IN OUT BLOB) return BLOB;
       function getFileContent(file bfile, charset varchar2 default 'WE8MSWIN1252') return CLOB;
       function getFileContent(filename varchar2, directoryName varchar2 default USER, charset varchar2 default 'WE8MSWIN1252') return CLOB;
       function getFileContent(file bfile, charset varchar2 default 'WE8MSWIN1252', tempCLOB IN OUT CLOB) return CLOB;
       function getFileContent(filename varchar2, directoryName varchar2 default USER, charset varchar2 default 'WE8MSWIN1252', tempCLOB IN OUT CLOB) return CLOB;
       procedure createHomeFolder(userName varchar2);
       procedure createPublicFolder;
       procedure createDirectoryTree(path varchar2);
       procedure uploadFiles(FILE_LIST varchar2 default 'ls.xml', UPLOAD_DIRECTORY_NAME varchar2 default USER, REPOSITORY_FOLDER_PATH varchar2 default '/home/' || USER , BATCH_SIZE number default 1);
       procedure put_xml(XML XMLTYPE);
       function printNestedTables(XML_TABLE varchar2) return XMLType;
       procedure printXMLToFile(xmlContent XMLType, targetDirectory varchar2, Filename VARCHAR2);
       function  getDefaultTableName(PATH VARCHAR2) return VARCHAR2;
       function  getXMLReference(PATH VARCHAR2) return REF XMLType;
       function  getXMLReferenceByResID(RESOID RAW) return REF XMLType;
       function getVersionsByPath(path VARCHAR2) return RESOURCE_ID_TABLE pipelined;
       function getVersionsByResid(RESID RAW) return RESOURCE_ID_TABLE pipelined;
       function isCheckedOut(PATH VARCHAR2) return number;
       function isCheckedOutByRESID(RESOID RAW) return number;
       procedure updateXMLContent(path VARCHAR2, content XMLType);
       procedure updateBinaryContent(path VARCHAR2,content BLOB);
       procedure updateCharacterContent(path VARCHAR2,content CLOB,db_charset VARCHAR2);
       procedure renameCollectionTable (XMLTABLE varchar2, XPATH varchar2, COLLECTION_TABLE_PREFIX varchar2);
    end XDB_UTILITIES_10200;
    show errors
    create or replace package body XDB_UTILITIES_10200
    as
    -- When using getFileContent() the application must explicitly free the CLOB that the function returns
    function getBinaryContent(file bfile,
                        tempBLOB IN OUT BLOB)
    return BLOB
    is
      targetFile      bfile;
      dest_offset     number :=  1;
      src_offset      number := 1;
      lang_context    number := 0;
      conv_warning    number := 0;
      begin
        targetFile := file;
        if (tempBLOB is null) then
          DBMS_LOB.createTemporary(tempBLOB,true,DBMS_LOB.SESSION);
        else
          DBMS_LOB.trim(tempBLOB,0);
        end if;
        DBMS_LOB.fileopen(targetFile, DBMS_LOB.file_readonly);
        DBMS_LOB.loadBlobfromFile
           tempBLOB,
           targetFile,
           DBMS_LOB.getLength(targetFile),
           dest_offset,
           src_offset
        DBMS_LOB.fileclose(targetFile);
        return tempBLOB;
    end;
    function getBinaryContent(file bfile)
    return BLOB
    is
      tempBLOB BLOB := NULL;
    begin
      return getBinaryContent(file,tempBLOB);
    end;
    function getBinaryContent(filename varchar2,
                              directoryName varchar2 default USER,
                        tempBLOB IN OUT BLOB)
    return BLOB
    is
       file            bfile := bfilename(directoryName,filename);
    begin
      return getBinaryContent(file,tempBLOB);
    end;
    function getBinaryContent(filename varchar2,
                              directoryName varchar2 default USER)               
    return BLOB
    is
       tempBLOB BLOB := NULL;
    begin
      return getBinaryContent(filename,directoryName,tempBLOB);
    end;
    function getFileContent(file bfile,
                      charset varchar2 default 'WE8MSWIN1252',
                      tempCLOB IN OUT CLOB)
    return CLOB
    is
      targetFile      bfile;
      dest_offset     number :=  1;
      src_offset      number := 1;
      lang_context    number := 0;
      conv_warning    number := 0;
      begin
        targetFile := file;
        if (tempCLOB is null) then
          DBMS_LOB.createTemporary(tempCLOB,true,DBMS_LOB.SESSION);
        else
          DBMS_LOB.trim(tempCLOB,0);
        end if;
        DBMS_LOB.fileopen(targetFile, DBMS_LOB.file_readonly);
        DBMS_LOB.loadClobfromFile
           tempCLOB,
           targetFile,
           DBMS_LOB.getLength(targetFile),
           dest_offset,
           src_offset,
           nls_charset_id(charset),
           lang_context,
           conv_warning
        DBMS_LOB.fileclose(targetFile);
        return tempCLOB;
    end;
    function getFileContent(file bfile,
                      charset varchar2 default 'WE8MSWIN1252')
    return CLOB
    is
      tempCLOB CLOB := NULL;
    begin
      return getFileContent(file,charset,tempCLOB);
    end;
    -- When using getFileContent() the application must explicitly free the CLOB that the function returns
    function getFileContent(filename varchar2,
                            directoryName varchar2 default USER,
                      charset varchar2 default 'WE8MSWIN1252',
                      tempCLOB IN OUT CLOB)
    return CLOB
    is
       file            bfile := bfilename(directoryName,filename);
    begin
      return getFileContent(file,charset,tempCLOB);
    end;
    function getFileContent(filename varchar2,
                            directoryName varchar2 default USER,
                      charset varchar2 default 'WE8MSWIN1252')               
    return CLOB
    is
       tempCLOB CLOB := NULL;
    begin
      return getFileContent(filename,directoryName,charset,tempCLOB);
    end;
    procedure createHomeFolder(userName varchar2)
    as
      targetResource varchar2(256);
      realUserName varchar2(64);
      result boolean;
    begin
      realUserName := upper(userName);
      targetResource := '/home';
      if (not dbms_xdb.existsResource(targetResource)) then
        result := dbms_xdb.createFolder(targetResource);
        dbms_xdb.setAcl(targetResource,'/sys/acls/bootstrap_acl.xml');
        update RESOURCE_VIEW
           set res = insertChildXML
                       res,
                       '/Resource',
                       'Comment',
                       xmlelement("Comment",'Contains home folder for each XDB User.')
         where equals_path(res,targetResource) = 1;
      end if;
      targetResource := targetResource || '/' || realUserName;
      if (not dbms_xdb.existsResource(targetResource)) then
        result := dbms_xdb.createFolder(targetResource);
        update RESOURCE_VIEW
           set res = insertChildXML
                       res,
                       '/Resource',
                       'Comment',
                       xmlelement("Comment", realUserName || '''s home folder.')
         where equals_path(res,targetResource) = 1;
      end if;
      dbms_xdb.setAcl(targetResource,'/sys/acls/all_owner_acl.xml');
      update resource_view
             set res = updateXml(res,'/Resource/Owner/text()',realUserName)
      where equals_path(res,targetResource) = 1;
    end;
    procedure createPublicFolder
    as
    begin
       xdb_helper.createPublicFolder(USER);
    end;
    procedure createDirectoryTree(path varchar2)
    as
      pathSeperator varchar2(1) := '/';
      parentFolderPath varchar2(256);
      result boolean;
      folderExists number(6):= 1;
    begin
      -- dbms_output.put_line('Processing ' || path);
      select count(*)
      into folderExists
      from resource_view
      where equals_path(res,path) = 1;
      -- dbms_output.put_line('FolderExists = ' || folderExists);
      if (folderExists = 0) then
        parentFolderPath := substr(path,1,instr(path,pathSeperator,-1)-1);
        -- dbms_output.put_line('FolderExists = ' || FolderExists);   
        createDirectoryTree(parentFolderPath);
        result := dbms_xdb.createFolder(path);
      end if;
    end;
    procedure uploadFiles(FILE_LIST varchar2 default 'ls.xml', UPLOAD_DIRECTORY_NAME varchar2 default USER, REPOSITORY_FOLDER_PATH varchar2 default '/home/' || USER , BATCH_SIZE number default 1)
    as
      pathSeperator varchar2(1) := '/';
      DIRECTORY_PATH      varchar2(256); 
      SUBDIRECTORY_PATH   varchar2(256);
      TARGET_FOLDER_PATH  varchar2(256);
      TARGET_FILE_PATH    varchar2(256);
      TARGET_FILE_NAME    varchar2(256);
      RESOURCE_PATH       varchar2(256);
      sqlStatement        varchar2(256);
      FILELIST_XML        XMLTYPE := XMLType(bfilename(UPLOAD_DIRECTORY_NAME,FILE_LIST),nls_charset_id('AL32UTF8'));
      CONTENT_XML         XMLType;
      result              boolean;
      filecount           binary_integer := 0;
      FILELIST_DOM    DBMS_XMLDOM.DOMDOCUMENT;
      FILES_NL        DBMS_XMLDOM.DOMNODELIST;
      DIRECTORY_NL    DBMS_XMLDOM.DOMNODELIST;
      FILENAME_NL     DBMS_XMLDOM.DOMNODELIST;
      FILES_NODE      DBMS_XMLDOM.DOMNODE;
      DIRECTORY_NODE  DBMS_XMLDOM.DOMNODE;
      FILE_NODE       DBMS_XMLDOM.DOMNODE;
      TEXT_NODE       DBMS_XMLDOM.DOMNODE;
      ENCODING_ATTR   DBMS_XMLDOM.DOMATTR;
      REPLACE_ATTR    DBMS_XMLDOM.DOMATTR;
      PATH            VARCHAR2(256);
      FILE_NAME       VARCHAR2(256);
      ENCODING_TEXT   VARCHAR2(32);
      ATTR_VALUE      VARCHAR2(256);
      REPLACE_OPTION  BOOLEAN; 
      REPLACE_DEFAULT BOOLEAN;
      DEBUG_BUFFER    VARCHAR2(255);
    begin
      -- Create the set of Folders in the XDB Repository
      FILELIST_DOM := DBMS_XMLDOM.newDOMDocument(FILELIST_XML);
      DIRECTORY_NL := DBMS_XMLDOM.GETELEMENTSBYTAGNAME(FILELIST_DOM,'directory');
      FOR i in 0 .. (DBMS_XMLDOM.GETLENGTH(DIRECTORY_NL) - 1) LOOP
        DIRECTORY_NODE := DBMS_XMLDOM.ITEM(DIRECTORY_NL,i);
        TEXT_NODE      := DBMS_XMLDOM.GETFIRSTCHILD(DIRECTORY_NODE);
        DIRECTORY_PATH := DBMS_XMLDOM.GETNODEVALUE(TEXT_NODE);
        DIRECTORY_PATH := REPOSITORY_FOLDER_PATH || DIRECTORY_PATH;
        createDirectoryTree(DIRECTORY_PATH);
      END LOOP;
      -- Load the Resources into the XML DB Repository
      FILES_NL           := DBMS_XMLDOM.GETELEMENTSBYTAGNAME(FILELIST_DOM,'files');
      FILES_NODE         := DBMS_XMLDOM.ITEM(FILES_NL,0);
      REPLACE_DEFAULT    := FALSE;
      REPLACE_ATTR       := DBMS_XMLDOM.getAttributeNode(DBMS_XMLDOM.MAKEELEMENT(FILES_NODE),'replace');
      if not (DBMS_XMLDOM.ISNULL(REPLACE_ATTR)) then
        REPLACE_DEFAULT  := xdb_dom_helper.varchar_to_boolean(DBMS_XMLDOM.getVALUE(REPLACE_ATTR));
      end if;
      FILENAME_NL := DBMS_XMLDOM.GETELEMENTSBYTAGNAME(FILELIST_DOM,'file');
      FOR i in 0 .. (DBMS_XMLDOM.GETLENGTH(FILENAME_NL) - 1) LOOP
        FILE_NODE          := DBMS_XMLDOM.ITEM(FILENAME_NL,i);
        TEXT_NODE          := DBMS_XMLDOM.GETFIRSTCHILD(FILE_NODE);
        TARGET_FILE_PATH   := DBMS_XMLDOM.GETNODEVALUE(TEXT_NODE);
        TARGET_FILE_NAME   := substr(TARGET_FILE_PATH,instr(TARGET_FILE_PATH,pathSeperator,-1)+1);
        TARGET_FOLDER_PATH := substr(TARGET_FILE_PATH,1,instr(TARGET_FILE_PATH,pathSeperator,-1));
        TARGET_FOLDER_PATH := substr(TARGET_FOLDER_PATH,instr(TARGET_FOLDER_PATH,pathSeperator));
        TARGET_FOLDER_PATH := substr(TARGET_FOLDER_PATH,1,length(TARGET_FOLDER_PATH)-1);
        RESOURCE_PATH := REPOSITORY_FOLDER_PATH || TARGET_FOLDER_PATH || '/' || TARGET_FILE_NAME;
        -- dbms_output.put_line('Source =  ' || TARGET_FILE_PATH);
        -- dbms_output.put_line('File =  ' || TARGET_FILE_NAME);
        -- dbms_output.put_line('Target = ' || RESOURCE_PATH);
        ENCODING_ATTR      := DBMS_XMLDOM.getAttributeNode(DBMS_XMLDOM.MAKEELEMENT(FILE_NODE),'encoding');
        ENCODING_TEXT      := 'AL32UTF8';
        if not (DBMS_XMLDOM.ISNULL(ENCODING_ATTR)) then
          ENCODING_TEXT    := DBMS_XMLDOM.getValue(ENCODING_ATTR);
          dbms_output.put_line('Encoding for ' || TARGET_FILE_NAME || ' =  ' || ENCODING_TEXT);     
        end if;
        REPLACE_ATTR       := DBMS_XMLDOM.getAttributeNode(DBMS_XMLDOM.MAKEELEMENT(FILE_NODE),'Replace');
        REPLACE_OPTION     := REPLACE_DEFAULT;
        if not (DBMS_XMLDOM.ISNULL(REPLACE_ATTR)) then
          REPLACE_OPTION   := xdb_dom_helper.varchar_to_boolean(DBMS_XMLDOM.getValue(REPLACE_ATTR));
        end if;
        CONTENT_XML := xmltype(bfilename(UPLOAD_DIRECTORY_NAME,TARGET_FILE_PATH),nls_charset_id(ENCODING_TEXT));
        if (REPLACE_OPTION and dbms_xdb.existsResource(RESOURCE_PATH)) then
          dbms_xdb.deleteResource(RESOURCE_PATH);
        end if;
        result := dbms_xdb.createResource(RESOURCE_PATH,CONTENT_XML);
        filecount := filecount + 1;
        if (filecount = BATCH_SIZE) then
          filecount := 0;
          commit;
        end if;
      END LOOP;
    end;
    procedure put_xml(XML XMLTYPE)
    as
      buffer CLOB;
      offset binary_integer := 1;
      maxLength binary_integer;
      endofLine binary_integer := 1;
      linesize binary_integer;
    begin
      buffer    := xml.getClobVal();
      maxLength := dbms_lob.getLength(buffer);
      endofline := dbms_lob.instr(buffer,chr(10),offset,1);
      while (endofLine > 0) loop
         linesize  := endofline - offset;
         if (linesize > 255) then
           dbms_output.put_line(dbms_lob.substr(buffer,255,offset));
           offset := offset + 255;
         else
           dbms_output.put_line(dbms_lob.substr(buffer,linesize,offset));
           offset := offset + linesize + 1;
         end if;
         endofline := dbms_lob.instr(buffer,chr(10),offset,1);
      end loop;
      linesize := maxLength - offset;
      dbms_output.put_line(dbms_lob.substr(buffer,linesize+1,offset));
    end;
    function getDefaultTableName(path varchar2)
    return varchar2
    as
      targetURL   varchar2(4096);
      schemaURL   varchar2(1024);
      elementName varchar2(2000);
      defaultTableName  varchar2(32);
    begin
      select extractValue(res,'/Resource/SchemaElement')
        into targetURL
        from resource_view
       where equals_path(res,path) = 1;
      schemaURL := substr(targetURL,1,instr(targetURL,'#')-1);
      elementName := substr(targetURL,instr(targetURL,'#')+1);
      select extractValue
                schema,
                '/xsd:schema/xsd:element[@name="' || elementName || '"]/@xdb:defaultTable',
                xdb_namespaces.XMLSCHEMA_PREFIX_XSD || ' ' || xdb_namespaces.XDBSCHEMA_PREFIX_XDB
        into defaultTableName
        from user_xml_schemas
       where schema_URL = schemaURL;
      -- dbms_output.put_line('schemaURL = ' || schemaURL);
      -- dbms_output.put_line('XPath = ' || '/xsd:schema/xsd:element[@name="' || elementName || '"]/@xdb:defaultTable');
      -- dbms_output.put_line('Namespaces = ' || xdb_namespaces.XMLSCHEMA_PREFIX_XSD || ' ' || xdb_namespaces.XDBSCHEMA_PREFIX_XDB );
      -- dbms_output.put_line('Default Table = ' || defaultTableName );
      return defaultTableName;
    end;
    function getXMLReferenceByResID(resoid RAW)
    return REF XMLType
    as
    begin
      return xdb_helper.getXMLReferenceByResID(resoid);
    end;
    function getXMLReference(path varchar2)
    return REF XMLType
    as
    begin
      return xdb_helper.getXMLReference(path);
    end;
    function isCheckedOut(PATH VARCHAR2)
    return number
    as
    begin
      return xdb_helper.isCheckedOut(PATH);
    end;
    function isCheckedOutbyRESID(RESOID RAW)
    return number
    as
    begin
      return xdb_helper.isCheckedOutByRESID(RESOID);
    end;
    procedure cloneXMLContent(path varchar2)
    as
    begin
      update resource_view
         set res = updateXML(res,'/Resource/DisplayName',extract(res,'/Resource/DisplayName'))
       where equals_path(res, path) = 1;
    end;
    procedure updateXMLContent(path varchar2, content xmltype)
    as
       defaultTableName varchar2(32);
       sqlStatement varchar2(1000);
    begin
       defaultTableName := getDefaultTableName(path);
       cloneXMLContent(path);
       sqlStatement := 'update "' || defaultTableName || '" d set object_value = :1 where ref(d) = xdb_utilities.getXMLReference(:2)';
       dbms_output.put_line('SQL Statement ' || sqlStatement);
       execute immediate sqlStatement using content , path;
    end;
    procedure renameCollectionTable (XMLTABLE varchar2, XPATH varchar2, COLLECTION_TABLE_PREFIX varchar2)
    as
       SYSTEM_GENERATED_NAME varchar2(256);
       COLLECTION_TABLE_NAME varchar2(256);
       CLUSTERED_INDEX_NAME  varchar2(256);
       PARENT_INDEX_NAME     varchar2(256);
       RENAME_STATEMENT varchar2(4000);
    begin
       COLLECTION_TABLE_NAME := COLLECTION_TABLE_PREFIX || '_TABLE';
       CLUSTERED_INDEX_NAME := COLLECTION_TABLE_PREFIX || '_DATA';
       PARENT_INDEX_NAME := COLLECTION_TABLE_PREFIX || '_LIST';
       select TABLE_NAME
         into SYSTEM_GENERATED_NAME
         from ALL_NESTED_TABLES
        where PARENT_TABLE_NAME = XMLTABLE
          and PARENT_TABLE_COLUMN = XPATH
          and OWNER = USER;
       RENAME_STATEMENT := 'alter table ' || USER || '."' || SYSTEM_GENERATED_NAME || '" rename to "' ||COLLECTION_TABLE_NAME || '"';
       -- dbms_output.put_line(RENAME_STATEMENT);
       execute immediate RENAME_STATEMENT;
       begin
         select INDEX_NAME
           into SYSTEM_GENERATED_NAME
           from ALL_INDEXES
          where TABLE_NAME = COLLECTION_TABLE_NAME
            and INDEX_TYPE = 'IOT - TOP'
            and OWNER = USER;
         RENAME_STATEMENT := 'alter index ' || USER || '."' || SYSTEM_GENERATED_NAME || '" rename to "' || CLUSTERED_INDEX_NAME || '"';
         -- dbms_output.put_line(RENAME_STATEMENT);
         execute immediate RENAME_STATEMENT;
       exception
         when NO_DATA_FOUND then
           null;
       end;
       begin
         select INDEX_NAME
           into SYSTEM_GENERATED_NAME
           from ALL_IND_COLUMNS
          where COLUMN_NAME = XPATH
            and TABLE_NAME =  XMLTABLE
            and TABLE_OWNER = USER;
         RENAME_STATEMENT := 'alter index ' || USER || '."' || SYSTEM_GENERATED_NAME || '" rename to "' || PARENT_INDEX_NAME || '"';
         -- dbms_output.put_line(RENAME_STATEMENT);
         execute immediate RENAME_STATEMENT;
       exception
         when NO_DATA_FOUND then
           null;
       end;
    end;
    function processNestedTable(currentLevel in out number, currentNode in out XMLType, query SYS_REFCURSOR)
    return XMLType
    is
      thisLevel  number;
      thisNode   xmlType;
      result xmlType;
    begin
      thisLevel := currentLevel;
      thisNode := currentNode;
      fetch query into currentLevel, currentNode;
      if (query%NOTFOUND) then
        currentLevel := -1;
      end if;
      while (currentLevel >= thisLevel) loop
        -- Next Node is a decendant of sibling of this Node.
        if (currentLevel > thisLevel) then
          -- Next Node is a decendant of this Node.
          result := processNestedTable(currentLevel, currentNode, query);
          select xmlElement
                    "Collection",
                    extract(thisNode,'/Collection/*'),
                    xmlElement
                      "NestedCollections",
                      result
             into thisNode
             from dual;
        else
          -- Next node is a sibling of this Node.
          result := processNestedTable(currentLevel, currentNode, query);
          select xmlconcat(thisNode,result) into thisNode from dual;
        end if;
      end loop;
      -- Next Node is a sibling of some ancestor of this node.
      return thisNode;
    end;
    function printNestedTables(XML_TABLE varchar2)
    return XMLType
    is
       query SYS_REFCURSOR;
       result XMLType;
       rootLevel number := 0;
       rootNode xmlType;
    begin
       open query for
            select level, xmlElement
                            "Collection",
                            xmlElement
                              "CollectionId",
                              PARENT_TABLE_COLUMN
                          ) as XML
              from USER_NESTED_TABLES
           connect by PRIOR TABLE_NAME = PARENT_TABLE_NAME
                   start with PARENT_TABLE_NAME = XML_TABLE;
        fetch query into rootLevel, rootNode;
        result := processNestedTable(rootLevel, rootNode, query);
        select xmlElement
                  "NestedTableStructure",
                  result
          into result
          from dual;
        return result;
    end;
    procedure printXMLToFile(xmlContent XMLType, targetDirectory varchar2, Filename VARCHAR2)
    is
       fHandle utl_file.File_Type;
       xmlText CLOB := xmlContent.getClobVal();
       xmlTextCopy CLOB;
       xmlTextSize binary_integer := dbms_lob.getLength(xmlText) + 1;
       offset    binary_integer := 1;
       buffer    varchar2(32767);
       linesize  binary_integer := 32767;
       byteCount binary_integer;
       lob1 clob;
    begin
       dbms_lob.createtemporary(xmlTextCopy,TRUE);
       dbms_lob.copy(xmlTextCopy, xmlText, xmlTextSize);
       -- dbms_output.put_line('Text Size = ' ||  xmlTextSize);
       fhandle  := utl_file.fopen(targetDirectory,Filename,'w',linesize);
       while (offset < xmlTextSize)  loop
         if (xmlTextSize - offset > linesize) then
           byteCount := linesize;
         else
           byteCount := xmlTextSize - offset;
         end if;
         -- dbms_output.put_line('Offset = ' || Offset || ' ByteCount = '|| byteCount);
         dbms_lob.read(xmlTextCopy, byteCount, offset, buffer);
         -- dbms_output.put_line('After Read : ByteCount = '|| byteCount);
         offset := offset + byteCount;
         utl_file.put(fHandle, buffer);
         utl_file.fflush(fHandle);
       end loop;
       utl_file.new_line(fhandle);
       utl_file.fclose(fhandle);
       dbms_lob.freeTemporary(xmlTextCopy);
    end;
    procedure updateBinaryContent(path VARCHAR2,content BLOB)
    is
      xmllob BLOB;
    begin
      update RESOURCE_VIEW
         set res = updateXML(res,'/Resource/DisplayName/text()',extractValue(res,'/Resource/DisplayName/text()'))
       where equals_path(res,path) = 1;
      select extractValue(res,'/Resource/XMLLob')
        into xmllob
        from RESOURCE_VIEW
       where equals_path(res,path) = 1;
      dbms_lob.open(xmllob,dbms_lob.lob_readwrite);
      dbms_lob.trim(xmllob,0);
      dbms_lob.copy(xmllob,content,dbms_lob.getLength(content),1,1);
      dbms_lob.close(xmllob);
    end;
    procedure updateCharacterContent(path VARCHAR2,content CLOB,db_charset VARCHAR2)
    is
      xmllob        BLOB;
      source_offset integer := 1;
      target_offset integer := 1;
      warning       integer;
      lang_context  integer := 0;
    begin
      update RESOURCE_VIEW
         set res = updateXML(res,'/Resource/DisplayName/text()',extractValue(res,'/Resource/DisplayName/text()'))
       where equals_path(res,path) = 1;
      select extractValue(res,'/Resource/XMLLob')
        into xmllob
        from RESOURCE_VIEW
       where equals_path(res,path) = 1;
      dbms_lob.open(xmllob,dbms_lob.lob_readwrite);
      dbms_lob.trim(xmllob,0);
      dbms_lob.convertToBlob(xmllob,content,dbms_lob.getLength(content),source_offset,target_offset,nls_charset_id(db_charset),lang_context,warning);
      dbms_lob.close(xmllob);
    end;
    function getVersionsByPath(path VARCHAR2)
    return RESOURCE_ID_TABLE pipelined
    as
      RESOURCE_ID raw(16);
      SOURCE_LIST DBMS_XDB_VERSION.RESID_LIST_TYPE;
    begin
      select resid
        into RESOURCE_ID
        from resource_view
       where equals_path(res,path) = 1;
      pipe row (RESOURCE_ID);
      SOURCE_LIST := DBMS_XDB_VERSION.GETPREDECESSORS(PATH);
      while SOURCE_LIST.COUNT > 0 loop
        pipe row (SOURCE_LIST(1));
        SOURCE_LIST := DBMS_XDB_VERSION.GETPREDSBYRESID(SOURCE_LIST(1));
      end loop;
      return;
    end;
    function getVersionsByResid(RESID RAW)
    return RESOURCE_ID_TABLE pipelined
    as
      SOURCE_LIST DBMS_XDB_VERSION.RESID_LIST_TYPE;
    begin
      pipe row (RESID);
      SOURCE_LIST := DBMS_XDB_VERSION.GETPREDSBYRESID(RESID);
      while SOURCE_LIST.COUNT > 0 loop
        pipe row (SOURCE_LIST(1));
        SOURCE_LIST := DBMS_XDB_VERSION.GETPREDSBYRESID(SOURCE_LIST(1));
      end loop;
      return;
    end;
    end XDB_UTILITIES_10200;
    show errors
    grant execute on XDB_UTILITIES_10200 to public
    create or replace public synonym XDB_UTILITIES for XDB_UTILITIES_10200
    desc XDB_UTILITIES
    alter session set current_schema = SYS
    /

Maybe you are looking for

  • Do I Need To Install Lenovo Drivers After A Fresh Install Of Windows 7 Pro

    I've just installed Windows 7 Pro (with SP1) on a Lenovo ThinkPad Edge and after running the Lenovo System Update utiltiy it doesn't list any drivers that need installing. When I had a look at the Drivers & Downloads section of this website it lists

  • Downloading a Connect recording directly (i.e. not streaming)

    According to a public 'Welcome to Connect 9' recorded webinar, one can now download recording directly without having to stream them in real time to the local workstation: https://onlineevents.adobeconnect.com/_a655548740/p82otjzrh2h/?launcher=false&

  • ADF mobile: How to pack a third party jars into apk

    Hi Expert, I am using Jdeveloper + ADF mobile 11.1.2.4 to develop an android application. In this application, I need to call some functions in the third party jar files.  I need to add the third party jars into my apk so that those classes can be fo

  • Mac Photoshop cs2 twain plugin/drivers

    This is driving me freaking nuts.  I recently did an HDD swap for a client on a dead drive for an intel based iMac (which is always fun tearing apart). Anywho, I replaced the exact version of photoshop on his machine, 9.0 (cs2), and his OS is 10.6.8

  • Problem in Forum Password

    Sir / Mam My user name: [email protected] In your Forums login. I could not login using my password. It displays as for the first time "There has been a technical problem. Please contact the webmaster or try again." On the next attempt it displays as