Oracle e BLOB

Resolvi a pouco um problema que me importunava há alguns dias, era com o uso de BLOB em oracle.

Basicamente, o que tenho na aplicação é um objeto java que quero serializar em BLOB e depois lê-lo, mas resultava nos seguintes erros:

</p>
java.io.IOException: Message [ORA-4283276] not found in 'oracle.jdbc.dbaccess.Messages'.
        at oracle.jdbc.dbaccess.DBError.SQLToIOException(DBError.java:717)
        at oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.java:249)
        at oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:158)
        at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2150)
        at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2163)
        at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2631)
        at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:734)
        at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253)
        at claudius.Serial56.writeAndReadSetBinary(Blob56.java:111)
        at claudius.Serial56.main(Blob56.java:399)
        # =========================================================
java.sql.SQLException: ORA-21608: duration is invalid for this function

        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
        at oracle.jdbc.oci8.OCIDBAccess.check_error(OCIDBAccess.java:2355)
        at oracle.jdbc.oci8.OCIDBAccess.createTemporaryLob(OCIDBAccess.java:3678)
        at oracle.jdbc.dbaccess.DBAccess.createTemporaryLob(DBAccess.java:1355)
        at oracle.sql.LobDBAccessImpl.createTemporaryBlob(LobDBAccessImpl.java:373)
        at oracle.sql.BLOB.createTemporary(BLOB.java:778)
        at claudius.SerialBase.buildBlob(SerialBase.java:205)
        at claudius.Serial56.writeAndReadBLOBCreateTemporary(Blob56.java:151)
        at claudius.Serial56.main(Blob56.java:405)
        # =========================================================
java.io.IOException: Message [ORA-4282764] not found in 'oracle.jdbc.dbaccess.Messages'.
        at oracle.jdbc.dbaccess.DBError.SQLToIOException(DBError.java:717)
        at oracle.jdbc.driver.OracleBlobInputStream.needBytes(OracleBlobInputStream.java:249)
        at oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:158)
        at oracle.jdbc.driver.OracleBufferedStream.read(OracleBufferedStream.java:131)
        at claudius.Serial56.writeAndReadInsertEmpty(Blob56.java:284)
        at claudius.Serial56.main(Blob56.java:412)

</font>

A versão do Oracle era 9.2.0.6 (disponível apenas no metalink.oracle.com), entã o ambiente foi atualizado para o 9.2.0.7 (último da série 9.2.x), mesmo porque no release notes não indicava nenhuma correção específica do erro que apresentava para mim.

O conselho então é: atualize a versão do Oracle para a mais recente

Written on September 16, 2005