home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.databases.oracle      Overblown overpriced overengineered SHIT      2,288 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 485 of 2,288   
   Jim Kennedy to oracle_technet@yahoo.com   
   Re: global temporary table --> invalid R   
   03 Oct 03 14:17:19   
   
   From: kennedy-down_with_spammers@no_spam.comcast.net   
      
   "Oracle_Technet"  wrote in message   
   news:c3e04899.0310022230.799c3a82@posting.google.com...   
   > Reason as per my understanding: java front end would be using   
   > connection pooling, and the session is not bound. so once the back end   
   > proc gives the output back to front end, and then the front end tries   
   > to access the blob stored in the global temp table, it will give   
   > error, as global temp table is session specific. (so rowid not found).   
   > Same type of errors would be encountered with ref cursors based on   
   > global temp tables.   
   > So, don't use Global Temporary tables for returning resultsets to java   
   > front end.   
   > Hope this helps.   
   >   
   > JavaDeveloper@volcanomail.com (Corrine) wrote in message   
   news:<54774824.0309290654.58fb3f16@posting.google.com>...   
   > > Hi,   
   > >   
   > > I am creating a global temporary table that is session-specific. I   
   > > insert a BLOB into this table, and then select the BLOB from this   
   > > table into a ResultSet. The ResultSet sees this BLOB object, and I am   
   > > able to get the binary input stream from this blob. However, when I   
   > > invoke InputStream.read(byte[]) on this input stream, I get the   
   > > following exception:   
   > >   
   > > java.io.IOException: ORA-01410: invalid ROWID   
   > > ORA-06512: at "SYS.DBMS_LOB", line 751   
   > > ORA-06512: at line 1   
   > >   
   > >   
   > > at oracle.jdbc.dbaccess.DBError.SQLToIOException(DBError.java:625)   
   > >   
   > > at   
   oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.jav   
   a:179)   
   > >   
   > > at   
   oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:113)   
   > >   
   > > at   
   oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:91)   
   > >    ...   
   > >   
   > > Just for clarity, here is basically the code I'm using:   
   > >   
   > > CallableStatement cstmt2 = db.prepareCall("commit");   
   > >     CallableStatement cstmt = db.prepareCall("create global temporary   
   > > table temp_table (blobid NUMBER unique, blob_col BLOB) on commit   
   > > preserve rows");   
   > >     cstmt.execute();   
   > >     cstmt.close();   
   > >     cstmt2.execute();   
   > >     CallableStatement cstmt1 = db.prepareCall("insert into temp_table   
   > > values (1, empty_blob())");   
   > >     cstmt1.execute();   
   > >     cstmt1.close();   
   > >     cstmt2.execute();   
   > >     cstmt2.close();   
   > >   
   > >   CallableStatement plsqlblock =   
   > > db.prepareCall(stringThatFillsInEmptyBlobInTempTable);   
   > >    plsqlblock.execute();   
   > >   plsqlblock.close();   
   > >   
   > >   PreparedStatement pstmt1 = db.prepareStatement("select blob_col from   
   > > temp_table where blobid = 1");   
   > >   ResultSet rset = pstmt1.executeQuery();   
   > >   BLOB bl;   
   > >   if (rset.next())   
   > >   {   
   > >     System.out.println("success.");    //<--- This prints out.   
   > >     bl = ((OracleResultSet)rset).getBLOB(1);   
   > >   }   
   > >   pstmt1.close();   
   > >   
   > >   InputStream bis = bl.getBinaryStream();   
   > >   int numBytes = 0;   
   > >   byte[] theBytes = new byte[appropriateLength];   
   > >   numBytes = bis.read(theBytes);   ///*******EXCEPTION HAPPENS   
   > > HERE!!!!   
   > >   
   > >   
   > > I would also like to mention that when I change temp_table to be just   
   > > a regular table, everything works correctly.   
   > >   
   > > What's the problem, and how do I fix it?   
   > >   
   > > Thanks,   
   > >   
   > > Corrine   
      
   If it works on a regular table then why are you making things more expensive   
   by putting it in a temp table first?  Just get it out of the regular table.   
   Jim   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca