Serializing a CLOB using PL/SQL

Is there a way to get the results of:
'SELECT xmlgen.getXML("select * from EMP")
from dual'
in serialized form rather than as a CLOB?
Basically to bypass the creation of the CLOB and just return the XML rows as they are created?
I want to get the same result I would get if the XML CLOB was written to a file and then the file was loaded into a table with one column defined as a varchar2(2000); each record in the file would be one record in the table. Naturally I want to avoid the file altogether.
I can write a procedure that parses the CLOB and creates a table but I would like to avoid the table also. I'm not sure if a function returning a REF cursor would work.
null

<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Rick Post:
Is there a way to get the results of:
'SELECT xmlgen.getXML("select * from EMP")
from dual'
in serialized form rather than as a CLOB?
Basically to bypass the creation of the CLOB and just return the XML rows as they are created?
I want to get the same result I would get if the XML CLOB was written to a file and then the file was loaded into a table with one column defined as a varchar2(2000); each record in the file would be one record in the table. Naturally I want to avoid the file altogether.
I can write a procedure that parses the CLOB and creates a table but I would like to avoid the table also. I'm not sure if a function returning a REF cursor would work.
<HR></BLOCKQUOTE>
Write a simple PLSQL function like this:
function get_buf(page in CLOB) return VARCHAR2 is
buf_t LONG RAW;
amount BINARY_INTEGER := 32768;
begin
dbms_lob.read(page,amount,0,buf_t);
return utl_raw.cast_to_varchar2(buf_t);
end;
And add the correct pragme to be use this function into select statement (WRNDS,WRNPS):
then use it like this:
'SELECT get_buf(xmlgen.getXML("select * from EMP")) from dual'
Hope this help, Marcelo.

Similar Messages

  • Parse an Aggregate in XML Document using PL/SQL

    Hi. I've been successful with parsing a TAG in XML Document stored in CLOB using PL/SQL XML Parser.
    However, I need help on how to get the whole aggregate in XML Document stored in CLOB.
    sample XML Doc :
    <library>
    <book>
    <title>Oracle Complete Reference</title>
    <author>Kevin</Author>
    <year>2000</year>
    </book>
    <video>
    <title>Learning C++</title>
    <length>2 hours</length>
    <video>
    </library>
    I need a function that will accept an Input which is the aggregate name and will return the aggregate value.
    With the sample XML above, say the input is 'VIDEO', the function will return :
    <video>
    <title>Learning C++</title>
    <length>2 hours</length>
    <video>
    I'll really appreciate any help.
    null

    I used such an example to parse several Varchar2 strings in a given DB session:
    BEGIN
    parser := xmlparser.newparser ;
    xmlparser.parsebuffer(parser,xmlout) ;
    domdoc := xmlparser.getDocument(parser) ;
    xmlparser.FREEPARSER(parser) ;
    parser.id := -1 ;
    nodes := xslprocessor.selectNodes(
    xmldom.makenode(domdoc),
    'Positionen/Position') ;
    for i in 1 .. xmldom.getLength(nodes) loop
    node := xmldom.item(nodes,i-1) ;
    -- do s/thing with the node
    end loop ;
    xmldom.freedocument(domdoc) ;
    RETURN(komponenten) ;
    EXCEPTION
    WHEN OTHERS THEN
    if parser.id <> -1 then xmlparser.freeparser(parser) ;
    end if ;
    if domdoc.id <> -1 then xmldom.freedocument(domdoc) ;
    end if ;
    RAISE ;
    END ;
    However, after about 2000 of nodes lists parsed, I get an ArrayIndexOutOfBoundsException from XMLNodeCover. Obviously, I should release the nodes or the nodelist, but I have not found any procedure to do this.
    Pascal

  • Problem while using oracle.sql.CLOB

    Hello,
    I was trying to use oracle.sql.CLOB to update CLOB types in database. I was able to successfully run the update when I use the connection obtained from normal DriverManager.getConnection method. But have issues when I use a datasource lookup, Am using Websphere as my JDBC provider environ.
    The exception I get during the execution of this line is
    oracle.sql.CLOB newClob = oracle.sql.CLOB.createTemporary((java.sql.Connection)conn, false, oracle.sql.CLOB.DURATION_CALL);
    java.lang.ClassCastException: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection
    as my connection is obtained by DataSource.getConnection() method.
    Is this a documented limitation of Oracle SQL CLOB class or is there a way I can tweak the code to work.
    Am using a oracle 9i thin driver
    Thanks
    Message was edited by:
    caniknow

    With the new Oracle drivers there is no need to do it that complicated.
    Finally Oracle has implemented the standard JDBC calls, and inserting a CLOB is really easy now:
    String clobContent  = populateClobData(); // whatever...
    stmt = con.prepareStatement("INSERT INTO clob_table (id, clob_col) VALUES (?,?)";
    stmt.setInt(1, 42);
    Reader r = new StringReader(clobContent);
    stmt.setCharacterStream(2, r, clobContent.length());
    stmt.executeUpdate();
    con.commit();This works with UPDATE as well. If you need to deal with BLOBs simply use setBinaryStream().
    Reading is done using getCharacterStream() or getBinaryStream()
    This actually works across all (or at leas all major) database systems

  • How to update java.sql.Clob using javax.persistence.EntityManager?

    Hello.
    Can anyone tell me (or show me some example) how to update java.sql.Clob using javax.persistence.EntityManager.
    When I’m trying to update column (with type Clob) value is not inserting, after update column is empty. I haven’t any error during update, I’m using database Oracle 10g.
    Edited by: ernest211 on Jul 16, 2009 1:24 AM

    Post some code so we can see how you are doing it. If you are using JPA entities take a look at the @Lob annotation.
    m

  • CLOBs and Dynamic SQL method 4

    We have just added CLOBs ( select_dp->T == 112 ) to our applications. We have a application tier server that is a Pro*C program that reads and iterprets some "extended" .sql files. We this server uses dynamic sql method 4, with host arrays, etc. The docs say you cannot do a FETCH FOR <value> with CLOBs, but you can ALLOCATE and FREE the clobLocator with a FOR clause. What good is the ALLOCATE and FREE "FOR" if you can't FETCH with a FOR ?? Can you really select clobs along with typical varchars??

    Can you tell me exactly where are you going to use the Dynamic SQL method 4 ? so that i can help you in using the method.
    Thiagu.

  • XML Generation using a sql query in an efficient way -Help needed urgently

    Hi
    I am facing the following issue while generating xml using an sql query. I get the below given table using a query.
         CODE      ID      MARK
    ==================================
    1 4 2331 809
    2 4 1772 802
    3 4 2331 845
    4 5 2331 804
    5 5 2331 800
    6 5 2210 801
    I need to generate the below given xml using a query
    <data>
    <CODE>4</CODE>
    <IDS>
    <ID>2331</ID>
    <ID>1772</ID>
    </IDS>
    <MARKS>
    <MARK>809</MARK>
    <MARK>802</MARK>
    <MARK>845</MARK>
    </MARKS>
    </data>
    <data>
    <CODE>5</CODE>
    <IDS>
    <ID>2331</ID>
    <ID>2210</ID>
    </IDS>
    <MARKS>
    <MARK>804</MARK>
    <MARK>800</MARK>
    <MARK>801</MARK>
    </MARKS>
    </data>
    Can anyone help me with some idea to generate the above given CLOB message

    not sure if this is the right way to do it but
    /* Formatted on 10/12/2011 12:52:28 PM (QP5 v5.149.1003.31008) */
    WITH data AS (SELECT 4 code, 2331 id, 809 mark FROM DUAL
                  UNION
                  SELECT 4, 1772, 802 FROM DUAL
                  UNION
                  SELECT 4, 2331, 845 FROM DUAL
                  UNION
                  SELECT 5, 2331, 804 FROM DUAL
                  UNION
                  SELECT 5, 2331, 800 FROM DUAL
                  UNION
                  SELECT 5, 2210, 801 FROM DUAL)
    SELECT TO_CLOB (
                 '<DATA>'
              || listagg (xml, '</DATA><DATA>') WITHIN GROUP (ORDER BY xml)
              || '</DATA>')
              xml
      FROM (  SELECT    '<CODE>'
                     || code
                     || '</CODE><IDS><ID>'
                     || LISTAGG (id, '</ID><ID>') WITHIN GROUP (ORDER BY id)
                     || '</ID><IDS><MARKS><MARK>'
                     || LISTAGG (mark, '</MARK><MARK>') WITHIN GROUP (ORDER BY id)
                     || '</MARK></MARKS>'
                        xml
                FROM data
            GROUP BY code)

  • Can I create a file using pl/sql code in application server ?

    Hi
    I wanted to create a file(any kind of file .txt .csv .exe etc..) using pl/sql code in application server?
    Please help me with an example...in this regard
    Regards
    Sa

    864334 wrote:
    I wanted to create a file(any kind of file .txt .csv .exe etc..) using pl/sql code in application server?And how is this "file" to be delivered?
    Files can be created by PL/SQL code and stored in the Oracle database as CLOBs. This a fairly easy and robust process. It runs entirely in the database. It conforms to transaction processing. The "file" (as a CLOB) resides in the database and can thus be secured via database security, is part of database backups and so on.
    The basic issue is how to deliver the contents of the CLOB to the user. If via FTP, then the database can directly FTP the contents of the CLOB to the FTP server as a file. If via HTTP, the database can deliver the CLOB as a HTTP download directly to the web browser.
    If the client is Java or .Net, then the CLOB contents can be delivered via SQL or DBMS_LOB or a custom PL/SQL interface.
    In such cases, there is no need to step outside the secure and flexible database environment and create a physical o/s file in the wild (outside the controls of database security, data integrity and transaction processing). This is thus recommended and is the preference.

  • BPEL process to Insert XML into DB using pl/sql stored proc

    Hi,
    We have created a BPEL process in which we are taking input request and store it into Oracle Database using PL/SQL proc.
    We have been unsuccessful in doing so because the data stored in table has root element missing.
    Has any body done this (insert xml into DB using pl/sql stored proc) successfully ?
    We can so this successfully if we do not use stored procedure and store data directly in table.
    Regards

    I have done this, stored it as a CLOB.
    Also I received the payload as an opaque schema, so I had to convert the message from binary into string.
    This way the root element doesn't get removed.
    cheers
    James

  • Write / store xml data in Xe and retrieve stored data using pl/sql

    Hi to all,
    i'm searching a tutorial on:
    A - how to write / store xml data in Xe and retrieve stored data using pl/sql
    I don't want to use other technologies, because i use htmldb and my best practice is with pl/sql.
    I was reading an ebook (quite old maybe) however it's about oracle 9 and it's talking about xmltype:
    1 - I don't understand if this is a user type (clob/varchar) or it's integrated in Oracle 9 however i will read it (it's chapter 3 titled Using Oracle xmldb).
    Please dont'reply here: i would be glad if someone can suggest me a good tutorial / pdf to achieve task A in Oracle XE.
    Thanx

    Thank you very much Carl,
    However my fault is that i've not tried to create the table via sql plus.
    Infact i was wrong thinking that oracle sql developer allows me to create an xmltype column via the create table tool.
    however with a ddl script like the following the table was created successfully.
    create table example1
    keyvalue varchar2(10) primary key,
    xmlcolumn xmltype
    Thank you very much for your link.
    Message was edited by:
    Marcello Nocito

  • READ CONCURRENT OUTPUT USING PL/SQL

    Hi,
    Environment - multi node.
    Is there any possibility for reading concurrent request output from db node using pl/sql coding.
    Rgds,
    Sathya

    STEP - 2
    SQL>
    SQL> DECLARE
      2    l_ctx dbms_xmlsave.ctxType ;
      3    l_xml CLOB :=
      4  '<?xml version="1.0" encoding="UTF-8" ?>
      5  <NewDataSet>
      6      <ROW>
      7          <DEPARTMENT>BA52</DEPARTMENT>
      8          <PCS_CONTRACT_TAG>MD-3GSM</PCS_CONTRACT_TAG>
      9          <LOCATION>Australia</LOCATION>
    10          <MAY_2006>21668</MAY_2006>
    11      </ROW>
    12      <ROW>
    13          <DEPARTMENT>BA501</DEPARTMENT>
    14          <PCS_CONTRACT_TAG>MD-3GSM</PCS_CONTRACT_TAG>
    15          <LOCATION>China</LOCATION>
    16          <MAY_2006>8166</MAY_2006>
    17      </ROW>
    18      <ROW>
    19          <DEPARTMENT>BA522</DEPARTMENT>
    20          <PCS_CONTRACT_TAG>MD-3GSM</PCS_CONTRACT_TAG>
    21          <LOCATION>Australia</LOCATION>
    22          <MAY_2006>21668</MAY_2006>
    23      </ROW>
    24  </NewDataSet>' ;
    25  BEGIN
    26      l_ctx := dbms_xmlsave.newContext(targetTable => 'XML_INSERT');
    27      dbms_output.put_line(dbms_xmlsave.insertXML(ctxHdl => l_ctx,
    28                                                  xDoc   => l_xml) ||
    29                           ' rows inserted.');
    30      dbms_xmlsave.closeContext(l_ctx);
    31  END;
    32  /
    3 rows inserted.
    PL/SQL procedure successfully completed.Regards.
    Satyaki De.

  • Using pl/sql in forms to access rs232 information

    Does anyone know how to capture information receved from serial port (example: serial code) using pl/sql with forms.
    THX.

    What you need is a 3rd party comm ocx or ole
    control like SAXCOMM,PDQCOMM etc.
    Once this is loaded on your machine , then using forms goto the programs "import OLE libray interfaces" option and load the commms control you are using. You must choose the events and methods. Once this is done then the programme units should be updated with the procs (methods) you can call.
    I hope this helps.

  • View clob data is sql

    i have a column name "Description" with clob datatype.
    In one of the records, the 'description' has 5mb of text data.
    Is there a way to display the whole 5mb of data.
    Thanks in advance,
    Regards

    If you are using PL/SQL Developer its very easy to see the CLOB oblects just clicking ... button infront of that column .
    OR
    If you are using SQL*PLUS
    SET LONG 10000 -- to the size u want
    select col_clob from test
    Else
    set the offset LOBOFFSET from where u want to see the out put, 1 will give u the out put from begining
    SET LOBOFFSET 1
    Select col_clob from test

  • Parse XML Elements/Attributes from CLOB in PL/SQL

    Hi folks,
    I'm new to XML development in Oracle...I need some help in Parsing a XML stored in a CLOB column using PL/SQL.
    We are using Oracle 9i R2. Do i need install the XDK and /or XML DB?
    Basically the xml has some quiz questions and the answers to the quiz. Once student submits the quiz we need parse the XML and calculate the grade.
    Any help is appreciated...
    Thanks,

    A bit dirty but this works:
    Create an XMLType based on the CLOB contents...
    select extractvalue(value(x), '/PERSON/PER_ID/text()') PER_ID, extractvalue(value(x), '/PERSON/PER_ID/@changed') PER_ID_CHG
    , extractvalue(value(x), '/PERSON/SURNAME/text()') PER_SURNAME, extractvalue(value(x), '/PERSON/SURNAME/@changed') PER_SURNAME_CHG
    , extractvalue(value(x), '/PERSON/ADDRESS/STREET_NO/text()') PER_STREET_NO, extractvalue(value(x), '/PERSON/ADDRESS/STREET_NO/@changed') PER_STREET_NO_CHG
    , extractvalue(value(x), '/PERSON/ADDRESS/POSTCODE/text()') PER_POSTCODE, extractvalue(value(x), '/PERSON/ADDRESS/POSTCODE/@changed') PER_POSTCODE_CHG
    from table(xmlsequence(extract(xmltype('
    <PERSON>
    <PER_ID changed="1">260180</PER_ID>
    <SURNAME changed="2">MARTIN</SURNAME>
    <ADDRESS>
    <STREET_NO changed="3">1</STREET_NO>
    <POSTCODE changed="4">LE3 8RA</POSTCODE>
    </ADDRESS>
    </PERSON>')
    , 'PERSON')
    ) x;

  • Read XML File Using PL/SQL

    Hi,
    I have to read a XML file using PL/SQL. I am new to this so please explain in easy steps.
    Regards,
    SF

    STEP - 2
    SQL>
    SQL> DECLARE
      2    l_ctx dbms_xmlsave.ctxType ;
      3    l_xml CLOB :=
      4  '<?xml version="1.0" encoding="UTF-8" ?>
      5  <NewDataSet>
      6      <ROW>
      7          <DEPARTMENT>BA52</DEPARTMENT>
      8          <PCS_CONTRACT_TAG>MD-3GSM</PCS_CONTRACT_TAG>
      9          <LOCATION>Australia</LOCATION>
    10          <MAY_2006>21668</MAY_2006>
    11      </ROW>
    12      <ROW>
    13          <DEPARTMENT>BA501</DEPARTMENT>
    14          <PCS_CONTRACT_TAG>MD-3GSM</PCS_CONTRACT_TAG>
    15          <LOCATION>China</LOCATION>
    16          <MAY_2006>8166</MAY_2006>
    17      </ROW>
    18      <ROW>
    19          <DEPARTMENT>BA522</DEPARTMENT>
    20          <PCS_CONTRACT_TAG>MD-3GSM</PCS_CONTRACT_TAG>
    21          <LOCATION>Australia</LOCATION>
    22          <MAY_2006>21668</MAY_2006>
    23      </ROW>
    24  </NewDataSet>' ;
    25  BEGIN
    26      l_ctx := dbms_xmlsave.newContext(targetTable => 'XML_INSERT');
    27      dbms_output.put_line(dbms_xmlsave.insertXML(ctxHdl => l_ctx,
    28                                                  xDoc   => l_xml) ||
    29                           ' rows inserted.');
    30      dbms_xmlsave.closeContext(l_ctx);
    31  END;
    32  /
    3 rows inserted.
    PL/SQL procedure successfully completed.Regards.
    Satyaki De.

  • Clobbered by a CLOB - Using C# in Visual Studio 2005

    Hello All,
    What I am trying to do:
    I am trying to insert a string as a CLOB into Oracle via C# using Visual Studio (VS) 2005.
    What I am using:
    The Oracle Tools for VS 2005 are installed and work fabulously with other types of data.
    Research I have done on my own:
    1. I have read the thread "ORA-01461"
    2. Have modified an example (see below) from the Oracle web site
    ..... as noted in the comments below (Jason Price).
    3. Addtionally, there are a number of www references.
    4. However, after a long unproductive day none are working for me.
    Error messages from Oracle (caught by the catch block):
    The error is: Oracle.DataAccess.Client.OracleException ORA-00936: missing expression at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src) at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior) at Oracle.DataAccess.Client.OracleCommand.ExecuteReader() at clobSample.workThis() in c:\Documents and Settings\joe.user\My Documents\Visual Studio 2005\WebSites\HDTS\App_Code\clobSample.cs:line 71
    Thank you kind people of the Oracle Community,
    Mark
    *********** Code is Below ***********
    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using Oracle.DataAccess.Client;
    using Oracle.DataAccess.Types;
    public class clobSample
    public clobSample()
    // TODO: Add constructor logic here
    public OracleConnection getConnectionString(string DBuser, string DBpass)
    // Build Connection String
    string connectionString = "Data Source=MY_DATA_SOURCE;User Id=";
    connectionString += DBuser + ";Password=";
    connectionString += DBpass + ";Persist Security Info=True";
    OracleConnection connection = new OracleConnection(connectionString);
    return connection;
    ClobExample4.cs shows how to update a CLOB
    using SELECT ... FOR UPDATE
    public string workThis()
    string strResult = "";
    try
    // create an OracleConnection object to connect to the database and open
    // the connection
    OracleConnection myOracleConnection =
    getConnectionString("DB_USER_NAME", "DB_PASSWORD");
    myOracleConnection.Open();
    // create an OracleCommand object to hold a SQL statement
    OracleCommand myOracleCommand = myOracleConnection.CreateCommand();
    // step 1: create an OracleTransaction object
    OracleTransaction myOracleTransaction =
    myOracleConnection.BeginTransaction();
    // step 2: read the row
    myOracleCommand.CommandText =
    "SELECT TICKET_NUM, COMMENT " +
    "FROM HDTS_TICKET_EVENTS " +
    "WHERE TICKET_NUM = 1 FOR UPDATE";
    // THIS IS WHERE THE CODE ERRORS OUT *
    OracleDataReader myOracleDataReader =
    myOracleCommand.ExecuteReader();
    myOracleDataReader.Read();
    // Console.WriteLine("myOracleDataReader[\"id\"] = " +
    // myOracleDataReader["id"]);
    // step 3: get the LOB locator
    OracleClob myOracleClob =
    myOracleDataReader.GetOracleClob(1);
    // step 4: write to the LOB
    myOracleClob.Erase();
    string text = "Alas poor Yoric, I knew him well";
    char[] charArray = text.ToCharArray();
    myOracleClob.Write(charArray, 0, charArray.Length);
    Console.WriteLine("myOracleClob.Value = " + myOracleClob.Value);
    // step 5: commit the transaction
    myOracleTransaction.Commit();
    // Console.WriteLine("Successfully committed transaction");
    // close the OracleDataReader and the OracleConnection object
    myOracleDataReader.Close();
    myOracleConnection.Close();
    // Console.WriteLine("\nPress any key to end");
    // Console.ReadLine();
    return strResult;
    } // close try
    catch (Exception e)
    strResult = "The error is: " + e;
    return strResult;
    } // close work this
    } // close clobSample class
    Edited by: microBiker on Sep 30, 2008 5:01 AM

    Hi,
    I dont think this has anyting to do with CLOB, but rather the use of a reserved word for a column name.
    How did you get the table created with a field named "COMMENT"? That's a reserved word so you shouldnt use it, even if you can someone force the database to accept it by using quotes for example...
    SQL> select count(*) from v$reserved_words where keyword='COMMENT';
    COUNT(*)
    1
    SQL> create table t1 (comment clob);
    create table t1 (comment clob)
    ERROR at line 1:
    ORA-00904: : invalid identifier
    SQL> create table t1 ("COMMENT" clob);
    Table created.
    SQL> select comment from t1;
    select comment from t1
    ERROR at line 1:
    ORA-00936: missing expression
    I assume the error might be stemming from that, as I see no reason for the code to error.
    Cheers,
    Greg

Maybe you are looking for

  • I try to add files from my computer, but they never show up.

    I've tried the copying thing too. usually, all I have to do is click file>add file to library>(chose a file) and everything's fine. but lately, I would go through the process and there'd be absolutely no change in my library, not even a notice.

  • Reading & writing from MS Excel files in Webdynpro ABAP

    Dear experts, We have a requirement to read and write from an MS excel file in a Webdynpro ABAP based application. The application would be deployed on WAS (Web Application Server) which is running as part of SAP ECC on UNIX platform. What is not cle

  • Half internal hard drive half external

    i buy alot of movies but do not have enough room on my internal to hold them all so i hold it in a tb external harddrive. is there anyway to have one itunes lib list and combine what i have on my external with my internal and not have the movies ther

  • Vision builder keeps getting non response error when initially opening.

    I cannot get vision builder to go beyond the initial splash screen.  Tried using either the computer or target. Thanks, Dave

  • Do I really need to write ANY code to create menus

    I need to create a Enhanced CD. You know....a CD, that when put into a computer pops up with menus and options to play music, videos, goto a website display a PDF etc...... I know Director does this, because the last Enhanced CD I saw had a lillte "d