Java ORA-22922从kotlin应用程序向oracle传递blob过程
创建BLOB并将其传递给过程的代码:Java ORA-22922从kotlin应用程序向oracle传递blob过程,java,oracle,kotlin,stored-procedures,Java,Oracle,Kotlin,Stored Procedures,创建BLOB并将其传递给过程的代码: override fun saveImage(pdByteArray: ByteArray?, imageFormat: String): Long { val blob = dataSource.connection.createBlob() blob.setBytes(1, pdByteArray) val parameters = hashMapOf( "p_image_data"
override fun saveImage(pdByteArray: ByteArray?, imageFormat: String): Long {
val blob = dataSource.connection.createBlob()
blob.setBytes(1, pdByteArray)
val parameters = hashMapOf(
"p_image_data" to blob,
"p_image_format" to imageFormat
)
val out = saveImageFileCall.execute(parameters)
return ((out["p_file_id"] ?: 0) as BigDecimal).toLong()
}
PROCEDURE save_image(p_file_id OUT VARCHAR2,
p_image_data IN BLOB,
p_image_format IN VARCHAR2)
IS
BEGIN
INSERT INTO images (image_id, image_data, image_format)
VALUES (images_seq.nextval, p_image_data, p_image_format)
RETURNING image_id INTO p_file_id;
END;
Oracle程序:
override fun saveImage(pdByteArray: ByteArray?, imageFormat: String): Long {
val blob = dataSource.connection.createBlob()
blob.setBytes(1, pdByteArray)
val parameters = hashMapOf(
"p_image_data" to blob,
"p_image_format" to imageFormat
)
val out = saveImageFileCall.execute(parameters)
return ((out["p_file_id"] ?: 0) as BigDecimal).toLong()
}
PROCEDURE save_image(p_file_id OUT VARCHAR2,
p_image_data IN BLOB,
p_image_format IN VARCHAR2)
IS
BEGIN
INSERT INTO images (image_id, image_data, image_format)
VALUES (images_seq.nextval, p_image_data, p_image_format)
RETURNING image_id INTO p_file_id;
END;
结果是ORA-22922。非常感谢您的帮助。这很有帮助
无需创建BLOB,您可以将简单的字节数组传递给过程-但必须使用OracleTypes.BINARY绑定该数组:
saveImageFileCall = SimpleJdbcCall(jdbcTemplate)
.withSchemaName(dataSource.connection.schema)
.withCatalogName("images_pkg")
.withProcedureName("save_image")
.declareParameters(
SqlParameter("p_image_data", OracleTypes.BINARY),
SqlParameter("p_image_format", OracleTypes.NVARCHAR)
)
...
val parameters = hashMapOf(
"p_image_data" to pdByteArray,
"p_image_format" to imageFormat
)
val out = saveImageFileCall.execute(parameters)
这很有帮助
无需创建BLOB,您可以将简单的字节数组传递给过程-但必须使用OracleTypes.BINARY绑定该数组:
saveImageFileCall = SimpleJdbcCall(jdbcTemplate)
.withSchemaName(dataSource.connection.schema)
.withCatalogName("images_pkg")
.withProcedureName("save_image")
.declareParameters(
SqlParameter("p_image_data", OracleTypes.BINARY),
SqlParameter("p_image_format", OracleTypes.NVARCHAR)
)
...
val parameters = hashMapOf(
"p_image_data" to pdByteArray,
"p_image_format" to imageFormat
)
val out = saveImageFileCall.execute(parameters)
也许这能帮上忙?也许这能帮上忙?