首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-22922,同时将blob从kotlin应用程序传递到oracle过程

ORA-22922,同时将blob从kotlin应用程序传递到oracle过程
EN

Stack Overflow用户
提问于 2020-10-02 22:20:37
回答 1查看 45关注 0票数 1

创建BLOB并将其传递给过程的代码:

代码语言:javascript
复制
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过程:

代码语言:javascript
复制
  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。都会很感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2020-10-02 23:08:10

这个post很有帮助

不需要创建BLOB,您可以将简单的字节数组传递给过程-但您必须将该数组与OracleTypes.BINARY绑定:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64173170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档