我正在使用JPA 2.0。我想调用Oracle存储过程。其中一个参数是BLOB。
PROCEDURE test(file IN BLOB);
我正在尝试使用下一个代码调用它:
byte[] bytes = ...;
Query query = em.createNativeQuery("{ CALL test(?) }");
query.setParameter(1, bytes);
query.executeUpdate();
我收到了下一个错误:
PLS-00306:调用'test'
时参数的数量或类型错误问题是如何传递blob参数,因为我能够在没有blob参数的情况下调用其他存储过程。
由于
答案 0 :(得分:0)
试试这个:
@Override
public void insertData(DataSource ds, byte[] data) throws SQLException {
Connection conn = null;
CallableStatement cstmt = null;
try {
conn = ds.getConnection();
cstmt = conn.prepareCall("{call test (?)}");
Blob blob = conn.createBlob();
blob.setBytes(1, data);
cstmt.setBlob(1, blob);
cstmt.execute();
} finally {
if (cstmt != null) {
cstmt.close();
}
if (conn != null) {
conn.close();
}
}
}