4gl是支持java工具类的调用,但本身语法和java并不相通,一般只能在4gl中CALL调用java类的方法,所以要实现一些4gl做不到的功能,需要把另外去写java并打包成jar导进系统环境中,十分麻烦。
我们可以用oracle自定义函数,把java写进去oracle的源,在函数中引用java源,在4gl中用sql实现对应的功能。 下面是一个例子,实现HmacSHA256加密。 create or replace and compile java source named HmacSHA256 as import java.lang.*; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.DatatypeConverter; public class HmacSHA256 { public static String getHmacSHA256(String str1,String str2) { try { String teststr = str1; String AppSecretKey = str2; byte[] message = teststr.getBytes(); Mac mac = Mac.getInstance("HmacSHA256"); SecretKeySpec secretKey = new SecretKeySpec(AppSecretKey.getBytes("UTF-8"), "HmacSHA256"); mac.init(secretKey); byte[] result1 = mac.doFinal(message); String result = DatatypeConverter.printBase64Binary(result1); return result; } catch(Exception e) { return "" ; } } } CREATE OR REPLACE FUNCTION fun_hmacsha256(str1 IN STRING,str2 IN STRING) RETURN String IS LANGUAGE JAVA NAME 'HmacSHA256.getHmacSHA256(java.lang.String,java.lang.String) return String'; select fun_hmacsha256('123456','qsm16iZAtofROdDSNmPesvztwvxVHltY') from dual |
|