我正在尝试在Oracle 11g中实现一个函数,该函数调用java类来解密Blob图像信息。
一切似乎都有效,但我得到了ORA-06553 PLS-306“错误数量或类型的参数”
该函数采用blob并返回blob,因此我看不出错误的来源。
PL / SQL功能:
create or replace
function decrypt_image return blob as
language JAVA name 'Imageutil.decryptBlobImage (java.sqlBlob) return java.sqlBlob';
Java函数:
public class Imageutil
public static java.sql.Blob decryptBlobImage (java.sql.Blob img) throws Exception {
try {
int len = (int)img.length();
byte[] imagearray = img.getBytes(1, len);
byte[] decrypted = Encryptor.decryptBinary(imagearray);
Blob retval = new SerialBlob(decrypted);
return retval;
} catch (SQLException ex) {
ex.printStackTrace();
throw new Exception("Error handling blob",ex);
}
}
}
数据在表格中:
temp_image(id number, image blob, decrypted blob);
我正在尝试
update temp_image set decrypted = decrypt_image(image);
当我收到错误时。每次都会生成一个Oracle trc文件,但似乎没有错误:
========= Dump for error ORA 1110 (no incident) ========
----- DDE Action: 'DB_STRUCTURE_INTEGRITY_CHECK' (Async) -----
(然后对数据库进行完整性检查)。
该函数有效,原始数据是长原始的,我可以采取十六进制数据转储并解密它。测试表由原始长原始数据上的to_lob()函数加载。
答案 0 :(得分:0)
PL / SQL声明中似乎有java.sqlBlob
而不是java.sql.Blob
;但你也没有为你的函数提供一个参数声明:
create or replace
function decrypt_image (original_blob blob) return blob as
language JAVA name 'Imageutil.decryptBlobImage (java.sql.Blob) return java.sql.Blob';
您的版本PL / SQL函数没有参数,所以当您将其称为decrypt_image(image)
时, 传递错误数量的参数 - 它正在期待没有,但你通过了一个。