PL/SQL调用java方法

本文介绍了如何将部分业务逻辑从Java迁移到数据库端的PL/SQL,详细阐述了如何在Oracle中导入和使用Java代码,包括利用SQL Developer导入Java类,创建FUNCTION或PROCEDURE来调用Java方法,并给出了实际操作示例。此外,还讨论了数据库支持的Java版本和潜在的版本一致性问题。

最近项目中有一个需求,要把一部分业务逻辑从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,要版本一致,否则可能会出现版本支持的问题。

继续深究的话,就只有看

DBMS_JAVA Package

东西太多,不一定能用得上,不过看看,过个眼,还是可以的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值