专栏/培训园地/ 文章详情 /

外部java函数迁移

yxz 2024/11/27 362 0 0
摘要

一.使用说明
1.1用户权限
三权分立下,仅允许拥有DBA权限的用户创建外部函数;
四权分立下,仅允许拥有DB_OBJECT_ADMIN权限的用户创建外部函数;
1.2 ini参数
需设置ENABLE_EXTERNAL_CALL 为1.
ENABLE_EXTERNAL_CALL 静态参数,是否允许创建和执行外部函数,修改后需重启数据库,默认为0.
1.3 dmagent
Java外部函数的执行都通过代理dmagent工具进行,为了执行Java外部函数,需要先启动dmagent服务。dmagent执行程序在dm8安装目录的tool/dmagent子目录下。

二.举例说明
2.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.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';
/
2.3 查询
select tadd(1,2) from dual;
1732529407748.jpg
select tstr('xxx') from dual;
image.png
迁移报错
image.png
2.4 查询oracle端函数名
select object_name,object_type from dba_objects where object_type='JAVA SOURCE';
image.png
2.5 查询源码
set line 200;
column text for a80;
SELECT NAME,TEXT FROM DBA_SOURCE WHERE NAME ='TEST';
image.png
2.6 编译打包jar
2.6.1格式化代码
将源码粘贴出来,使用在线代码格式化工具https://tool.oschina.net/codeformat/java 将代码做格式化。
2.6.2 编译jar包
(1)打开eclipse工具,点击file--new--java project,填写project name,假设填写项目名称为newp,点击finish.
(2)右键项目名称newp,点击new-package,填写Name,假设填写包名:com.test.package,点击finish.
(3)右键包名称,点击new-class,填写Name,假设填写类名:Test,点击finish.
(4)将格式化后的代码粘贴到Test类中,ctrl+s保存
(5)导出成Jar包。右键newp,点击Export--JAVA-JAR file--next,将.classpath,.project去掉勾选,选择一个打包后的路径,点击finish.
(6)将打包好的jar包放到数据库服务器上。
cp test.jar /home/dmdba/dmdbms/jdk/bin/test.jar
chown -R dmdba:dinstall /home/dmdba/dmdbms/jdk/bin/test.jar
2.7开启dmagent服务(注册成服务,注意java环境变量)
(1)安装jdk
(2)安装dmagent服务(使用root用户)
cd /home/dmdba/dmdbms/tool/dmagent
./service.sh install
(3)启动dmagent服务(dmdba用户)
cd /home/dmdba/dmdbms/tool/dmagent/service
./DmAgentService start
image.png
2.8赋权,改参
grant dba to TEST;
sp_set_para_value(2,'ENABLE_EXTERNAL_CALL',1);
重启数据库。
2.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'
"com.test.package1.Test.testAdd" USING java;
select tadd(1,2);
image.png
CREATE OR REPLACE FUNCTION tstr(c1 varchar)
RETURN varchar
EXTERNAL '/home/dmdba/dmdbms/jdk/bin/test.jar'
"com.test.package1.Test.testStr" USING java;
select tstr('xxx');
image.png

至此迁移完成。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服