Hi guys.

I have a situation where a database created under an earlier version of Derby
causes errors when iterating over a result set which contains a CLOB column.


Here's what is seen from the client:

Caused by: org.apache.derby.client.am.SqlException: 'SYSIBM.CLOBRELEASELOCATOR' 
is not recognized as a function or procedure.
        at 
org.apache.derby.client.am.Statement.completeSqlca(Statement.java:1833)
        at 
org.apache.derby.client.net.NetStatementReply.parsePrepareError(NetStatementReply.java:564)
        at 
org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(NetStatementReply.java:144)
        at 
org.apache.derby.client.net.NetStatementReply.readPrepare(NetStatementReply.java:77)
        at 
org.apache.derby.client.net.StatementReply.readPrepare(StatementReply.java:60)
        at 
org.apache.derby.client.net.NetStatement.readPrepare_(NetStatement.java:187)
        at org.apache.derby.client.am.Statement.readPrepare(Statement.java:1458)
        at 
org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInput(PreparedStatement.java:1890)
        at 
org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(PreparedStatement.java:1942)
        at 
org.apache.derby.client.am.PreparedStatement.prepare(PreparedStatement.java:318)
        at 
org.apache.derby.client.am.Connection.prepareCallX(Connection.java:1784)
        at 
org.apache.derby.client.am.CallableLocatorProcedures.clobReleaseLocator(CallableLocatorProcedures.java:645)
        at 
org.apache.derby.client.am.LOBStateTracker.checkCurrentRow(LOBStateTracker.java:113)
        at 
org.apache.derby.client.am.ResultSet.moveToCurrentRowX(ResultSet.java:3792)
        at org.apache.derby.client.am.ResultSet.nextX(ResultSet.java:290)
        at org.apache.derby.client.am.ResultSet.next(ResultSet.java:272)
        ... 22 more


From the server:

2008-05-02 01:44:12.890 GMT:
 Booting Derby version The Apache Software Foundation - Apache Derby - 10.4.1.3 
- (exported): instance 601a400f-0119-a725-9066-00000dd6c0b2
on database directory H:\<cut>

Database Class Loader started - derby.database.classpath=''
2008-05-02 01:44:41.093 GMT Thread[DRDAConnThread_6,5,derby.daemons] (XID = 
12729079), (SESSIONID = 1), (DATABASE = H:\Project Roundabout\FBI 
_MASTER_DEDUPED\Case\Stores\EvidenceDatabase), (DRDAID = 
C0A80063.G46B-665968585204464940{3}), Cleanup action starting
2008-05-02 01:44:41.093 GMT Thread[DRDAConnThread_6,5,derby.daemons] (XID = 
12729079), (SESSIONID = 1), (DATABASE = H:\Project Roundabout\FBI 
_MASTER_DEDUPED\Case\Stores\EvidenceDatabase), (DRDAID = 
C0A80063.G46B-665968585204464940{3}), Failed Statement is: CALL 
SYSIBM.CLOBRELEASELOCATOR(?)
ERROR 42Y03: 'SYSIBM.CLOBRELEASELOCATOR' is not recognized as a function or 
procedure.
        at 
org.apache.derby.iapi.error.StandardException.newException(StandardException.java:286)
        at 
org.apache.derby.impl.sql.compile.StaticMethodCallNode.bindExpression(StaticMethodCallNode.java:217)
        at 
org.apache.derby.impl.sql.compile.JavaToSQLValueNode.bindExpression(JavaToSQLValueNode.java:246)
        at 
org.apache.derby.impl.sql.compile.CallStatementNode.bindStatement(CallStatementNode.java:145)
        at 
org.apache.derby.impl.sql.GenericStatement.prepMinion(GenericStatement.java:314)
        at 
org.apache.derby.impl.sql.GenericStatement.prepare(GenericStatement.java:88)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(GenericLanguageConnectionContext.java:768)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(EmbedPreparedStatement.java:128)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement.<init>(EmbedCallableStatement.java:69)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement20.<init>(EmbedCallableStatement20.java:85)
        at 
org.apache.derby.impl.jdbc.EmbedCallableStatement30.<init>(EmbedCallableStatement30.java:61)
        at 
org.apache.derby.jdbc.Driver30.newEmbedCallableStatement(Driver30.java:122)
        at 
org.apache.derby.impl.jdbc.EmbedConnection.prepareCall(EmbedConnection.java:1567)
        at 
org.apache.derby.impl.drda.DRDAStatement.prepare(DRDAStatement.java:629)
        at 
org.apache.derby.impl.drda.DRDAStatement.explicitPrepare(DRDAStatement.java:596)
        at 
org.apache.derby.impl.drda.DRDAConnThread.parsePRPSQLSTT(DRDAConnThread.java:3618)
        at 
org.apache.derby.impl.drda.DRDAConnThread.processCommands(DRDAConnThread.java:789)
        at 
org.apache.derby.impl.drda.DRDAConnThread.run(DRDAConnThread.java:278)


Unless I'm mistaken, CLOBRELEASELOCATOR was one of those stored procedures
introduced in 10.3.1.4 to solve the issue where CLOBs would be sent in full
to the client instead of streaming over the network.  But this is 10.4.1.3,
it should still exist, yet we're seeing this error.

I've tried to reproduce it locally though, to no avail.

Daniel

Reply via email to