Доброго времени суток, коллеги.
Попытался использовать пример из FAQ на sql ru, добавил в него методы:
Код:
public static oracle.sql.BLOB smBlobChunk2blob(oracle.sql.BLOB src) throws SQLException, IOException {
InputStream in = null;
OutputStream out = null;
BLOB outputBLOB = null;
try {
outputBLOB = BLOB.createTemporary(getConnection(),true, BLOB.DURATION_SESSION);
float f = 1/0;
in = src.getBinaryStream();
out = outputBLOB.getBinaryOutputStream();
int length;
byte[] rbuf = new byte[src.getChunkSize()];
byte[] wbuf;
boolean firstChunk = true;
while( (length = in.read(rbuf)) != -1 ) {
if( firstChunk ) {
firstChunk = false;
// конвертим 4 последовательных байта в int
int name_size = ((rbuf[0x0C + 3] & 0xFF) << 24) + ((rbuf[0x0C + 2] & 0xFF) << 16) + ((rbuf[0x0C + 1] & 0xFF) << 8) + (rbuf[0x0C] & 0xFF);
int offset = 0x0C + name_size + 7;
wbuf = ShiftBuffer(rbuf, offset);
length -= offset;
} else {
wbuf = rbuf;
}
out.write(wbuf, 0, length);
}
} finally {
if( out != null )
out.close();
if( in != null )
in.close();
}
return outputBLOB;
}
private static byte[] ShiftBuffer(byte[] src, int shift) {
if( shift > src.length )
return new byte[0];
byte[] trg = new byte[src.length - shift];
for( int i = 0; i < src.length - shift; i++ ) {
trg[i] = src[i + shift];
}
return trg;
}
соответственно добавил описание этого дела в package lob_utils:
Код:
function smBlobChunk2blob(src blob) return blob as
language java name 'LobUtils.smBlobChunk2blob(oracle.sql.BLOB) return oracle.sql.BLOB';
В результате при каждом вызове любого из описанных методов получаю ORA-03113, но в alert.log никаких следов этого события не остается. При трассировке сессии тоже ничего странного не записывается.
Подскажите откуда ноги у проблемы могут расти?
P.S. Сервер БД Oracle 9.2.0.8, крутится все это дело на win2003r2.