If you look at the OracleAdapter code in Cayenne and related classes, you'll 
see how bad we have to bend things to ensure users can seamlessly work with 
Oracle CLOB/BLOB. So that's the answer to the last question :-) 
Insert/update/delete/select should work with LOB columns.

I guess we just overlooked the aspect of using LOBs as sp parameters.

Andrus


On Sep 6, 2011, at 2:41 PM, Joseph Senecal wrote:
> Hi Andrus,
> 
> Currently the code is passing in a byte[], Cayenne is converting that into a 
> MemoryBlob. I have no problem with passing in a BLOB instead, but when I 
> looked up how to create a BLOB I got stuck. It requires a java.sql.Connection 
> as a parameter, and I haven't been able to find a way to return that from 
> Cayenne. As far as I know, the connection might not be selected for an 
> ObjectContext until I perform the query.
> 
> I checked the original code, which calls JDBC directly. There it just calls 
> setBytes on a Statement passing in the byte[], using a separate connection 
> just for the stored procedure. That should still work as a workaround.
> 
> I'm going to see if I can get permission to move the stored procedure 
> functionality to Java since I think that will provide better performance. But 
> will I run into the same problem using Blobs as an oracle column in a record?
> 
> Joe Senecal
> 
> On Sep 4, 2011, at 9:58 AM, Andrus Adamchik wrote:
> 
>> Hi Joe,
>> 
>> Oracle JDBC driver is messed up. Standard JDBC types are not working they 
>> way you'd expect them, and then a bunch of custom types to deal with. This 
>> looks like one of the examples. 
>> 
>> We may need to investigate if we can better abstract this particular case in 
>> Cayenne, but just a guess - what if you use oracle.sql.BLOB instead of 
>> org.apache.cayenne.util.MemoryBlob to call the stored procedure? I hope that 
>> should fix it in the interim.
>> 
>> Andrus
>> 
>> 
>> On Sep 2, 2011, at 6:39 PM, Joseph Senecal wrote:
>> 
>>> I'm trying to pass a Blob to a stored procedure. The parameter is defined 
>>> in the CayenneModeler as an IN parameter of type BLOB. I'm passing an array 
>>> of bytes to ProcedureQuery.addParameter. When the code runs it gets an cast 
>>> exception "org.apache.cayenne.util.MemoryBlob cannot be cast to 
>>> oracle.sql.BLOB".
>>> 
>>> I'm using version 3.1M2. Any suggestions as to what I'm doing wrong?
>>> 
>>> Joe Senecal
>>> 
>> 
> 
> 

Reply via email to