注册
oracle java source迁移分析
专栏/技术分享/ 文章详情 /

oracle java source迁移分析

广志 2024/09/27 691 0 0
摘要

1、oracle端创建java source 名为 test
create or replace and compile java source named test as
public class test {
public static int testAdd(int a, int b) {
return a + b;
}
public static String testStr(String str) {
return str + " hello";
}
} ;
/

2、创建函数
CREATE OR REPLACE function tadd(c1 number, c2 number)
RETURN number
AS
LANGUAGE JAVA NAME ‘test.testAdd(int,int) return int’;
/

CREATE OR REPLACE function tstr(c1 varchar)
RETURN varchar
AS
LANGUAGE JAVA NAME ‘test.testStr(java.lang.String) return java.lang.String’;
/

3、查询
select tadd(1,2) from dual;
图片1.png
select tstr(‘xxx’) from dual;
图片2.png
迁移报错
图片3.png

4、现在oracle端查询有哪些函数
select object_name,object_type from dba_objects where object_type=‘JAVA SOURCE’;
图片4.png

5、查询源码
set line 200;
column text for a80;
SELECT NAME,TEXT FROM DBA_SOURCE WHERE NAME =‘TEST’;
图片5.png

6、查询到源码可以放到达梦(jdk/bin)下去编译打包
cd /home/dmdba/dmdbms/jdk/bin
vim test.java --复制5里查出来的结果,注意格式
./javac -d . test.java --编译class文件
./jar -cvf test.jar test.class --打包
图片6.png
7、开启dmagent服务(注册成服务,注意java环境变量)
图片7.png
8、设置dm.ini参数 ENABLE_EXTERNAL_CALL = 1 静态(隐藏参数),重启数据库
sp_set_para_value(2,‘ENABLE_EXTERNAL_CALL’,1);
图片8.png

9、在DM中编写外部函数
–注意,tadd函数在oracle中参数类型为number,达梦目前只支持Int、字符串(char、varchar、varchar2)、bigint、double,分别对 应 java 类型:Int、string、 long、double;
所以做了改写把number换成了int

CREATE OR REPLACE FUNCTION tadd(a int, b int)
RETURN int
EXTERNAL ‘/home/dmdba/dmdbms/jdk/bin/test.jar’
“test.testAdd” USING java;

select tadd(1,2);
图片9.png

CREATE OR REPLACE FUNCTION tstr(c1 varchar)
RETURN varchar
EXTERNAL ‘/home/dmdba/dmdbms/jdk/bin/test.jar’
“test.testStr” USING java;

select tstr(‘xxx’);
图片10.png

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服