Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ORA-22922从kotlin应用程序向oracle传递blob过程_Java_Oracle_Kotlin_Stored Procedures - Fatal编程技术网

Java ORA-22922从kotlin应用程序向oracle传递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"

创建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()
}
  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)


也许这能帮上忙?也许这能帮上忙?