创建BLOB并将其传递给过程的代码:
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()
}Oracle过程:
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。都会很感谢你的帮助。
发布于 2020-10-02 23:08:10
这个post很有帮助
不需要创建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)https://stackoverflow.com/questions/64173170
复制相似问题