最近项目中有一个需求,要把一部分业务逻辑从Java实现放到数据库端,用PL/SQL实现。
普通业务逻辑倒还好,实现起来没有太大问题。但是有一部分比较复杂的逻辑,用PL/SQL写起来比较复杂。
尤其是一大部分共通功能。
调查了一下,可以用PL/SQL调用java写的方法。记录一下造作流程,以免忘记了。
1,利用第三方工具把JAVA类导入数据库中
推荐:sqldeveloper
工具上有个 Java -> java导入
导入的时候,删除 package xx.xx.xx.xx 不删除也行,不删除的话就会变成 xx/xx/xx/xx
选择source text ,然后贴上自己的代码。
如果代码有依赖jdk以外java代码的话,就先把这些代码先导入进去。依赖jar,目前还在研究中。
※还有一种方式就是通过语句创建
create or replace and compile java source named "FormateNumber"
as
/* java src */
import java.math.BigDecimal;
import java.util.HashMap;
...
public class FormateNumber{
private static final Pattern NUM_P = ...;
public static String fmtNum(String fmt,int value){
return fmtInt(fmt,value);
}
......
}
2.定义一个FUNCTION或者PROCEDURE调用这个java
这里我写了一个function的例子。
create or replace FUNCTION FMTNUM(
FMT IN VARCHAR2
,VAL IN NUMBER
) RETURN VARCHAR2 AS LANGUAGE java name 'FormateNumber.fmtNum(java.lang.String,int) return java.lang.String';
上面这个是有参数,有返回值的例子。没有参数的话,就写个()就行了。
3,使用这个FUNCTION
select FMTNUM('9999/99/99',99991231) FROM DUAL;
结果: 9999/12/31
和直接用java出来的结果完全一致。
4.深挖一把
看了一下,可以导入的有代码,class,realease。
也就是可以直接把本地编译好的class,jar放到oracle上执行。
查看当前oracle支持的java版本
select DBMS_JAVA.GETVERSION() as db_v,DBMS_JAVA.GET_OJVM_PROPERTY(propstring=>'java.version') as java_v FROM DUAL;
结果:db_v:12.2.0.1.0 java_v:1.8.0_121
有了這個信息我们往服务器上放自己的java代码的时候心里就有底了。1.8.0_121,要版本一致,否则可能会出现版本支持的问题。
继续深究的话,就只有看
东西太多,不一定能用得上,不过看看,过个眼,还是可以的。
本文介绍了如何将部分业务逻辑从Java迁移到数据库端的PL/SQL,详细阐述了如何在Oracle中导入和使用Java代码,包括利用SQL Developer导入Java类,创建FUNCTION或PROCEDURE来调用Java方法,并给出了实际操作示例。此外,还讨论了数据库支持的Java版本和潜在的版本一致性问题。
426

被折叠的 条评论
为什么被折叠?



