为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM Database Server 64 V8
【操作系统】:linux
【CPU】:
【问题描述】*:创建外部java函数,提示
“警告:创建的对象带有编译错误”。
创建语句为:
CREATE OR REPLACE FUNCTION "BASE_MANAGEMENT"."sm4e"(input VARCHAR,keys VARCHAR)
RETURN VARBINARY
EXTERNAL '/home/dmdba/dmdbms/bin/external_jar/oracle-encrypt-java-1.0.1.jar' "com.wt.SM4Alg2.encryptContext" USING JAVA;
错误提示:
[执行语句1]:
CREATE OR REPLACE FUNCTION "BASE_MANAGEMENT"."sm4e"(input VARCHAR,keys VARCHAR)
RETURN VARBINARY
EXTERNAL '/home/dmdba/dmdbms/bin/external_jar/oracle-encrypt-java-1.0.1.jar' "com.wt.SM4Alg2.encryptContext" USING JAVA;
警告:创建的对象带有编译错误
执行成功, 执行耗时35毫秒. 执行号:19815
影响了0条记录
1条语句执行成功
执行
alter FUNCTION "BASE_MANAGEMENT"."sm4e" compile;
控制台输出
总共1个语句正依次执行...
[执行语句1]:
alter FUNCTION "BASE_MANAGEMENT"."sm4e" compile;
执行失败(语句1)
第3 行附近出现错误[-6119]:
无效的数据类型
1条语句执行失败
java函数代码部分
public static byte[] encryptContext(String input, String key) throws Exception {
final byte[] result;
byte[] keyBates = Util.hexStringToBytes(key);
SM4 sm4Alg = new SM4();
SM4_Context sm4ctx = new SM4_Context();
sm4Alg.sm4_setkey_enc(sm4ctx, keyBates);
result = sm4Alg.sm4_crypt_ecb(sm4ctx, input.getBytes());
return result;
}
会不会是java函数返回值是byte[]的问题?
编译中报无效的数据类型问题,建议检查数据类型定义及类返回值类型问题。