PHP selecting LONG datatype returns erroneous data

I have a simple PHP script that queries an 8.1.6 database table with a couple of LONG datatype columns. The resulting output has a bunch of NULL characters and at the end of the column and duplicate data from the previous row. This only happens with this database instance. I run a similar query against a 9.2 database with LOB columns and the data returns correctly.
$begin = "2004-01-15";
$end = "2004-01-31";
$begin = strtotime($begin." 00:00:00");
$end = strtotime($end." 23:59:59");
$connection = OCIPLogon($oracleUser, $oraclePasswd, $oracleServer);
$query = "SELECT create_date, longcol1, longcol2 from table where create_date >= ".$begin." and create_date <= ".$end." order by create_date ";
$stmt = OCIParse($connection, $query);
OCIExecute($stmt, OCI_DEFAULT);
while (OCIFetch($stmt, OCI_ASSOC+OCI_RETURN_LOBS)) {
     $ncols = OCINumCols($stmt);
     for ( $i = 1; $i <= $ncols; $i++ ) {
          $result = ociresult($stmt, $i);
          if (is_object($result)) { echo "LOADING\n"; $result = $result->load(); }
          echo ocicolumnname($stmt, $i)." (".ocicolumntype($stmt, $i).") => ".trim($result)."\n";
     echo "\n";
output is:
CREATE_DATE (NUMBER) => 1074186503
LONGCOL1 (LONG) => This is my first row/column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
LONGCOL2 (LONG) => This is my first row second column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
CREATE_DATE (NUMBER) => 1074184298
LONGCOL1 (LONG) => This is my second row first column with a long statement in it. 567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
LONGCOL2 (LONG) => This is my second row second column with a long statement in it. 4567890 bla bla bla bla bla bla bla bla ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
The actual data in the two rows is:
First record:
CREATE_DATE => 1074186503
LONGCOL1 => This is my first row/column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla
LONGCOL2 => This is my first row second column with a long statement in it. 1234567890 bla bla bla bla bla bla bla bla
Second record:
CREATE_DATE => 1074184298
LONGCOL1 => This is my second row first column with a long statement in it.
LONGCOL2 => This is my second row second column with a long statement in it.
I am running PHP 4.3.6 on Linux. The database is Oracle 8.1.6.3.0.
Any idea what is causing this?

Get the latest version of oci8 and re-try. It has been extensively changed since your version. Try pulling the latest PHP from http://snaps.php.net
Try only querying one LONG at a time (just to test whether it works). I recall LONGS needing special treatment in C code.
When was the to_lob() function introduced in Oracle?:
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/functions185.htm#SQLRF06134
Maybe you can convert to a LOB?
-- cj

Similar Messages

  • Select statement not returning correct data

    I'm working on an application and I'm having a weird problem. The application connects to an Oracle database, pulls out some data, and does something with it. In the process of testing I've already read and dealt with some rows. On those rows the UPDATE_FLAG field was changed to a N so they wouldn't be selected again.
    I do want to select those rows again, so with SQLPlus I changed the UPDATE_FLAG back to Y. Now here's the strange part. The same select statement run from SQLPlus is returning thoe row I modified, but my application does not.
    Here's the select statement:
    SELECT * FROM MY_TABLE WHERE UPDATE_FLAG = 'Y' and USER_ID like 'B%';
    When I run this I get a row back called Brian.
    In my application I do this:
    try
                   Class.forName("oracle.jdbc.driver.OracleDriver");               
                   Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@server:port:sid", "username", "password");
                   Statement st = conn.createStatement();
                   ResultSet rec = st.executeQuery("SELECT * FROM MY_TABLE WHERE UPDATE_FLAG = 'Y' and USER_ID like 'B%'");
                   System.out.println("SELECT * FROM MY_TABLE WHERE UPDATE_FLAG = 'Y' and USER_ID like 'B%'");
                   while(rec.next())
                        System.out.println(rec.getString("USER_ID"));
                   st.close();
              } catch (Exception e)
                   System.out.println("Error -- " + e.toString());
                   e.printStackTrace();
                }When this runs it doesn't return Brian and there are no exceptions caught. It's like it does not find it.
    Assuming I explained this well enough, anyone have any ideas what the problem could be?
    Thanks,
    James

    I do want to select those rows again, so with SQLPlus I changed the UPDATE_FLAG back to Y. Last time I ran SQLPlus I explicitly had to do a commit after modifications, because it was creating a transaction around the sqlplus session. Of course running a query in that session would work on the modified data rather than the actual data.

  • Form/php not returning certain data

    So I just recently designed/launched a website (Dreamweaver CS 5.5) that utilizes a form for feedback from visitors. The form/corresponding php script seems to be functioning, as I have tested it numerous times. The only problem is that ONE of the entry forms doesn't seem to be returning any data.
    The HTML for the form is as follows:
      <form id="form1" name="form1" method="post" action="send.php">
            <table width="510" border="0">
              <tr>
                <td colspan="2"><p>Questions? Comments? Criticism?</p>
                <p>Let the Artist know by filling out this handy form:</p></td>
              </tr>
              <tr>
                <td width="72">Name:*</td>
                <td width="428" class="returntext"><span id="sprytextfield1">
                <label for="name"></label>
                <input type="text" name="name" id="name" />
                <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td>
              </tr>
              <tr>
                <td>E-Mail:*</td>
                <td class="returntext"><span id="sprytextfield2">
                <label for="email"></label>
                <input type="text" name="email" id="email" />
                <span class="textfieldRequiredMsg">A value is required.</span><span class="textfieldInvalidFormatMsg">Invalid format.</span><span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td>
              </tr>
              <tr>
                <td>Subject:</td>
                <td class="returntext"><label for="textfield"></label>
                  <span id="sprytextfield3">
                  <label for="subject"></label>
                  <input type="text" name="subject" id="subject" />
                  <span class="textfieldMinCharsMsg">Minimum number of characters not met.</span><span class="textfieldMaxCharsMsg">Exceeded maximum number of characters.</span></span></td>
              </tr>
              <tr>
                <td>Comment:*</td>
                <td><span id="sprytextarea1">
                  <label for="comment"></label>
                  <textarea name="comment" id="comment" cols="45" rows="5"></textarea>
    <span class="textareaRequiredMsg">A value is required.</span></span></td>
              </tr>
              <tr>
                <td> </td>
                <td><input type="submit" name="button" id="button" value="Submit" />
                <input type="reset" name="button2" id="button2" value="Reset" /></td>
              </tr>
              <tr>
                <td> </td>
                <td>Fields marked &quot;*&quot; are required.</td>
              </tr>
            </table>
          </form>
    And the PHP script is:
    <?php
    $to = "[email address removed by moderator]";
    $subject = $_REQUEST['subject'];
    $name = $_REQUEST ['name'];
    $name = $_REQUEST['name'] ;
    $email = $_REQUEST['email'] ;
    $comment = $_REQUEST['comment'] ;
    $totalmessage = "
            Name:        $name  \n
            Email:        $email  \n
            Subject:    $subject  \n
            Comment:    $comment  \n ";
    if (mail($to, $subject, $totalmessage)) {
       echo("<p>Message successfully sent!</p>");
      } else {
       echo("<p>Message delivery failed...</p>");
    ?>
    When I test the page through my browser (firefox 24.0), I receive the e-mail as it should be, except that the "comment" section is always empty, no matter what I enter. I have checked and double checked and triple checked, and the associated text field is names "comment", and its entry in the script is ['comment']. I have tried replacing the sprytextarea with a regular, non-spry text area, and that didn't make a difference either. The only difference between this field and the other fields (all of which are returning exactly what they should) is that it's a textarea rather than a text field...but if that is the case, I have no idea how to fix it.
    Any help on the matter would be much appreciated.

    According to the official specification for plain text email messages (http://tools.ietf.org/html/rfc2822#section-2.3), a newline character must not appear independently in the body. It should always be preceded by a carriage return.
    Your code looks like this:
    $totalmessage = "
            Name:        $name  \n
            Email:        $email  \n
            Subject:    $subject  \n
            Comment:    $comment  \n ";
    Change it to this:
    $totalmessage = "
            Name:        $name  \r\n
            Email:        $email  \r\n
            Subject:    $subject  \r\n
            Comment:    $comment";
    The specification also says that lines in the body must be no longer than 998 characters. Because you have no idea how long the content in the text area will be, it's a good idea to pass the body of the email to the wordwrap function like this before sending the mail:
    $totalmessage = wordwrap($totalmessage, "\r\n");
    I also agree with bregent that you should be using $_POST instead of $_REQUEST.

  • Oracle Personal Edition, data corruption in Long datatype column

    Oracle Personal Edition, data corruption in Long datatype column
    DATA Corruption in Oracle 8i Personal edition
    I am using a Long data type column to store a big text. In oracle Enterprise edition the data stored correctly. But in the Oracle Personal Edition, the Long data type column data corrupted. Some letters in the text are replaced by special character chr(0).
    The following data has been taken from a column (Which is of data type LONG).
    1. In the first one column name Template_ID stored correctly but in the second one T is missing. Some special characters has stored in that place. (Difference is in 6th Line)
    CREATED_DATE####09-21-2001 16:02:00$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
    ID####810200082001000004$$MODIFIEDDATE####09-21-2001 16:02:00$$SERVICE_RECEIVED####I$$SERVICE_RECORD####PO:F$$STEP_CODE####8$$STEP_RESULT####Failed$$STEP_ROW_
    ID####2$$TEMPLATE_ID####M116XX$$TEXT####$$UNIQUE_ID####810200082001$$UPPER_LIMIT
    CREATED_DATE####09-21-2001 16:02:00$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
    ID####810200082001000004$$MODIFIEDDATE####09-21-2001 16:02:00$$SERVICE_RECEIVED####I$$SERVICE_RECORD####PO:F$$STEP_CODE####8$$STEP_RESULT####Failed$$STEP_ROW_
    ID####2$$TEMPLA E_ID####M116XX$$TEXT####$$UNIQUE_ID####810200082001$$UPPER_LIMIT
    2. In the first one column name Template_ID stored correctly but in the second one E is missing. Some special characters has stored in that place. (Difference is in 6th Line)
    CREATED_DATE####09-21-2001 16:01:19$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
    ID####810200082001000002$$MODIFIEDDATE####09-21-2001 16:01:19$$SERVICE_RECEIVED####U$$SERVICE_RECORD####P:F$$STEP_CODE####7$$STEP_RESULT####Failed$$STEP_ROW_I
    D####2$$TEMPLATE_ID####78580A$$TEXT####$$UNIQUE_ID####810200082001$$UPPER_LIMIT#
    CREATED_DATE####09-21-2001 16:01:19$$LANGUAGE_ID####99$$LOWER_LIMIT####$$MEASURE
    ID####810200082001000002$$MODIFIEDDATE####09-21-2001 16:01:19$$SERVICE_RECEIVED####U$$SERVICE_RECORD####P:F$$STEP_CODE####7$$STEP_RESULT####Failed$$STEP_ROW_I
    D####2$$TEMPLAT ID####78580A$$TEXT####$$UNIQUEID####810200082001$$UPPER_LIMIT#

    See if this helps you any:
    Re: Google Maps

  • Select Long Raw data type is so slow?

    Hi
    I have a table having Long Raw data type field.It's store
    more than 2mb per record.But,I need to select others fields in this table without selecting Long Raw field.
    anyway,it's so slow for me. Any advise to me?
    thx a lot. :)

    I do not understand what you mean because if you have this table ( Example ):
    c1 number
    c2 number
    c3 long
    you can do this: select c1, c2 from <table_name>;
    Joel Pérez

  • Copying data contianing long datatype from one schema to another

    I'm using Oracle 8.1.7 and trying to move copy data from one schema to another.
    Usually an easy task. This time the data contains longs so I can't use standard SQL. The data in the long is too long for a PL/SQL long datatype so that's not worked.
    I've tried the COPY FROM command but get the invalid sql command error.
    Can anyone save my hair?

    The COPY command doesn't have to be all on one line. The continuation character for SQL*Plus commands is a hyphen.
    SQL> prompt "Hello"
    "Hello"
    SQL> prompt -
    "Hello""Hello"
    SQL>Metalink is the website for customers that pay for Oracle support. Go to www.oracle.com and click on the metalink button on the top left of the screen. It's called Metalink because Oracle support levels are named after metals: bronze, silver, gold.

  • In what order will select * return the data?

    hi guys,
    1) if we just do a select * from emp, will it return the data in the order of the data blocks in the extents. i.e. return all data blocks from extent 1, then from extent 2 and so forth?
    2) if we do a select * from emp, and say half the data blocks are already in the database buffer cache, how does Oracle know that the data blocks from emp are already in the database buffer cache? Does it keep some lookup table?
    thanks

    OracleGuy777 wrote:
    thanks guys,
    I will mark the question as closed, even though I am still a bit unsure as to why if we just start up a database so that the db cache is empty, and do a select * on a small table that is all on one disk, why the Oracle kernel would from a logical point of view choose different order to return the rows.
    but thanks anywayThe order in which rows are returned is a side effect of the execution plan chosen by the Query Optimizer (which is one reason why the ORDER BY clause exists), in plain relational theory both your underlying table and the results are relations (simply an unordered set of tuples) so consequently the optimizer is free to follow whatever method it likes to return the results. In the case of a Rule Based optimizer then there is simply a set of rules that determine the choice of execution plan, in the case of a cost based optimizer then the optimizer attempts to minimize the time taken to return the resultset by choosing an execution plan based on statistical information and algorithms. The existence of the buffer cache is in fact ignored for most practical purposes and certainly for the purposes you imagined.
    Now if your table is just that, a straight forward heap table with no indexes then you will likely get what you expect, that is rows returned in the order that the blocks in which they are held are located on disk; this isn't insert order necessarily by the way especially if ASSM is involved. This is only however because a full tablescan is the only available option for satisfying the query. Most tables however aren't like that, they have indexes, the query involves joins and filters and so on. Once you start allowing the possibility of other access paths then you allow the possibilty that rows or rather blocks will be visited in a different order to the simplistic one described above.
    Niall Litchfield

  • Selecting a Long datatype

    I have created a select statement and saved it to the variable sql_str. I then Open the cursor "OPEN v_cursor FOR sql_str;".
    One of the columns in the select statement has a datatype of LONG. I fetch the column into a variable that I have declared as Long. I get the following error: ORA-00997: illegal use of LONG datatype.
    What am I doing wrong?

    One of the columns in the select statement has a datatype of LONG. I fetch the column into a variable that I have declared > as Long. I get the following error: ORA-00997: illegal use of LONG datatype.
    What am I doing wrong?What are you doing differently:
    SQL> desc user_views
    VIEW user_views
    Name                                      Null?    Type                       
    VIEW_NAME                                 NOT NULL VARCHAR2(30)               
    TEXT_LENGTH                                        NUMBER(0)                  
    TEXT                                               LONG                        <-- Long
    TYPE_TEXT_LENGTH                                   NUMBER(0)                  
    TYPE_TEXT                                          VARCHAR2(4000)             
    OID_TEXT_LENGTH                                    NUMBER(0)                  
    OID_TEXT                                           VARCHAR2(4000)             
    VIEW_TYPE_OWNER                                    VARCHAR2(30)               
    VIEW_TYPE                                          VARCHAR2(30)               
    SUPERVIEW_NAME                                     VARCHAR2(30)               
    EDITIONING_VIEW                                    VARCHAR2(1)                
    READ_ONLY                                          VARCHAR2(1)                
    SQL> declare
       t   long;
    begin
       for c in (select text from user_views where rownum = 1)
       loop
          t := c.text;
          dbms_output.put_line (t);
       end loop;
    end;
    SELECT
        "LIB_DYN_QUERY_ID" AS "LIB_DYN_QUERY_ID"
       ,"LIB_DYN_QUERY_NAME" AS "LIB_DYN_QUERY_NAME"
       ,"LIB_DYN_QUERY" AS "LIB_DYN_QUERY"
       ,"CREATED_ON" AS "CREATED_ON"
       ,"CREATED_BY" AS "CREATED_BY"
      FROM
        "UT_LIB_DYN_QUERIES"
      WITH READ ONLY
    PL/SQL procedure successfully completed.?

  • How to get length of data on column with long datatype

    How to get length of data on column with long datatype without using pl/sql block

    ...another reason not to use LONG datatype for columns.
    Oracle advises to switch to LOB columns instead
    SQL> create table t
      2  (x long)
      3  /
    Table created.
    SQL> insert into t values (rpad ('x', 10000, 'x'))
      2  /
    1 row created.
    SQL> alter table t
      2  modify x clob
      3  /
    Table altered.
    SQL> desc t
    Name                                      Null?    Type
    X                                                  CLOB

  • Selecting From Column with Long Datatypes

    create table temp
    a long
    insert into temp values ('abc');
    commit;
    select * from temp
    where a = 'abc'
    I am getting the following error while am tring to select a = 'abc';
    ora-00997 : illegal use of LONG datatype
    How can i select values from a column with long datatypes

    insert into temp values ('abc');
    cannot (must not) work, when the column is type long (thats a numeric type!!)
    -> here you get an ora- 00911 errorcode
    that the select doesn't work then should be clear.
    mfg f.humer

  • Return all data without selecting any value in query filter

    Hi,
    I created a document with query filters(prompt, LOV). But sometimes users don't want to select any value and just want to return all data in the report.
    I can't find a way to achieve this. Does anyone know how to implement this ?
    Thanks.

    Hi,
    you can modify the "select" statement for your LOV and add an additionaly keyword like "ALL" in your list of values. Then you can modify your where-clause to handle the "ALL" keyword.
    E.g. (<your condition>=@prompt(....) or 'ALL'=@prompt(......) )
    Regards,
    Stratos

  • Illegal use of LONG datatype error message when i create materialized view

    Hello to all
    I want create read only materialized view replication environment two of our tables have LONG datatype when i create materialized view against on them
    I recieve this error message
    CREATE MATERIALIZED VIEW MDB.TOAD_PLAN_TABLE TABLESPACE aramis REFRESH FORCE WITH ROWID AS SELECT * FROM MDB.TOAD_PLAN_TABLE@arahisto
    Error report:
    SQL Error: ORA-00997: illegal use of LONG datatype
    00997. 00000 - "illegal use of LONG datatype"
    Do you know any resort solution for it?
    thanks

    You can not use longs in materialized views over a database link, you can however take a part of a long over to a materialized view.
    I have gotten this to work in the past l had to create a PL/SQL function that you can use to extract the character data from the long column and use that to
    as part of the function you will need to pass in the columns of the table that will identify the unique records so you can pick out the long column
    example function
    -- you will need to make sure this funtion is in the remote location as you can not select longs accross a DB LINK.
    CREATE OR REPLACE FUNCTION MDB.TOAD_PLAN_LONG_CONV
    (pass in the primary key columns for the table)
    RETURN VARCHAR2
    IS
    v_long VARCHAR2(32767) ;
    BEGIN
    BEGIN
    -- need to select the long column into the PL/SQL variable
    SELECT long_column
    INTO v_long
    FROM MDB.TOAD_PLAN_TABLE
    WHERE key_columns = passed columns ;
    EXCEPTION
    WHEN OTHERS THEN
    IF SQLCODE = '-01406' THEN
    NULL ;
    ELSE
    RAISE ;
    END IF ;
    END ;
    RETURN SUBSTR(v_long,1,4000) ;
    END ;
    Then when you create the materialized view utilize that function on the long column.
    create or replace materialized view MDB.TOAD_PLAN_TABLE TABLESPACE aramis REFRESH FORCE WITH ROWID
    AS
    SELECT column1, .... columnx,
    MDB.TOAD_PLAN_LONG_CONV@arahisto (primary key column list) as long_column_name
    FROM MDB.TOAD_PLAN_TABLE@arahisto ;
    See if this will work for you? Keep in mind however this solution will not get the entire long column only as much as a PL/SQL variable will hold of it.
    Mike

  • Using Decode with "Long" datatypes

    Hi,
    I want to use a select statement in a view which uses a decode function involving a "long" datatype. But doing some raises an error "Invalid datatypes". Is there a way around?
    Anupam.

    I'm a bit puzzled as to what it is you are trying to achieve (it has been an afternoon for vague requirements). Normally the sort of data that we would want to store in a LONG is ,er, long and therefore not susceptible to use in a DECODE. But it does not matter, because we can only manipulate LONGs in PL/SQL and that does not parse DECODE statements. We will have to use IF...ELSE constructs instead.
    CREATE OR REPLACE FUNCTION l2v (pl in rowid)  RETURN VARCHAR2
    AS
        ll LONG;
        rv VARCHAR2(20);        
    BEGIN
       SELECT col1
       INTO ll
       FROM   T_LONG
       WHERE  rowid = pl;
       IF ll LIKE '%text%'
       THEN
          rv := 'yes!';
       ELSE
          rv :=  'noooo';
       END IF;
       RETURN rv;
    END;
    SQL> select l2v(rowid) from t_long;
    L2V(ROWID)
    yes!
    yes!
    SQL> You can use this function in a query. Note that it is doing a SELECT in its own right so this will not be a very performant solution if you build the view on a big table.
    Cheers, APC

  • Select LONG column from Remote table

    Hi to all.
    I have the following problem: I can't select a LONG column from remote database, when there are Join operation in the query. Example:
    SELECT long_column FROM remote_table@DB
    -> that's OK, but:
    SELECT long_column FROM remote_table@DB INNER JOIN remote_table2@DB ON ...
    -> returns: "ORA-00997: Illegal use of LONG datatype"
    I cannot even perform (because there a LONG column in the joined table):
    SELECT nonlong_column FROM remote_table@DB INNER JOIN remote_table2@DB ON ...
    That's very strange to me because:
    SELECT long_column FROM local_table INNER JOIN local_table2 ON ...
    -> is OK!
    Can someone help me to SELECT a long column from remote in SELECT query with JOIN clause!
    Thanks a lot!

    Hi
    "Distributed queries are currently subject to the restriction that all tables locked by a FOR UPDATE clause and all tables with LONG columns selected by the query must be located on the same database. " by otn docs.
    I have no idea.
    Ott Karesz
    http://www.trendo-kft.hu

  • Best approach to return Large data ( 4K) from Stored Proc

    We have a stored proc (Oracle 8i) that:
    1) receives some parameters.
    2)performs computations which create a large block of data
    3) return this data to caller.
    compatible with both ASP (using MSDAORA.Oracle), and ColdFusion (using Oracle ODBC driver). This procedure is critical in terms of performance.
    I have written this procedure as having an OUT param which is a REF CURSOR to a record containing a LONG. In order to make this work, at the end of the procedure I have to store the working buffer (an internal LONG variable) into a temp table, and then open the cursor as a SELECT from the temp table.
    I have tried to open the cursor as a SELECT of the working buffer (from dual) but I get the error "ORA-01460: unimplemented or unreasonable conversion requested"
    I suspect this is taking too much time; any tips about the best approach here? is there a resource with REAL examples on returning large data?
    If I switch to CLOB, will it speed the process, be compatible with callers, etc ? all references to CLOB I saw use trivial examples.
    Thanks for any help,
    Yoram Ayalon

    We have a stored proc (Oracle 8i) that:
    1) receives some parameters.
    2)performs computations which create a large block of data
    3) return this data to caller.
    compatible with both ASP (using MSDAORA.Oracle), and ColdFusion (using Oracle ODBC driver). This procedure is critical in terms of performance.
    I have written this procedure as having an OUT param which is a REF CURSOR to a record containing a LONG. In order to make this work, at the end of the procedure I have to store the working buffer (an internal LONG variable) into a temp table, and then open the cursor as a SELECT from the temp table.
    I have tried to open the cursor as a SELECT of the working buffer (from dual) but I get the error "ORA-01460: unimplemented or unreasonable conversion requested"
    I suspect this is taking too much time; any tips about the best approach here? is there a resource with REAL examples on returning large data?
    If I switch to CLOB, will it speed the process, be compatible with callers, etc ? all references to CLOB I saw use trivial examples.
    Thanks for any help,
    Yoram Ayalon

Maybe you are looking for