如何从文件执行PL / SQL代码并将blob作为参数传递

时间:2016-09-26 15:03:47

标签: java oracle jdbc blob

我有PL / SQL代码,例如

   begin
      update table set value_blob = empty_blob()
      where expr_id = 2
      returning value_blob into :fileData;
      update table set value_text = 'test'
      where expr_id = 2;
    end;

存储在文件中。我正在尝试执行此过程并将另一个文件作为:fileData 参数传递:

public void handle(String connectionString, String procedure, byte[] dataFile) throws Exception {

    OracleDataSource ods = new OracleDataSource();
    ods.setURL(connectionString);

    try(Connection conn = ods.getConnection();
        CallableStatement statement = conn.prepareCall(procedure);
        InputStream inputStream = new ByteArrayInputStream(dataFile)) {

        statement.setBinaryStream("fileData", inputStream, dataFile.length);
        statement.executeUpdate();

    } catch (Exception e) {
        throw e;
    }
}

执行后,我在 value_txt 列中有' test' 值,但 value_blob 列中没有数据。此列中的先前数据已更改为空blob。我尝试了命名和编号参数,我确信dataFile字节数组不为空。

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,你期待这个陈述

  update table set value_blob = empty_blob()
  where expr_id = 2
  returning value_blob into :fileData;

将返回非空值。但是returning子句返回更新的值,即empty_blob()的结果 这就是您在value_blob列中找不到数据的原因。

如果要更新value_blob列,请尝试使用

update table set value_blob = (RAWTOHEX(UTL_RAW.cast_to_raw('some data'))) 
      where expr_id = 2
      returning value_blob into :fileData;