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;
select tstr(‘xxx’) from dual;
迁移报错
4、现在oracle端查询有哪些函数
select object_name,object_type from dba_objects where object_type=‘JAVA SOURCE’;
5、查询源码
set line 200;
column text for a80;
SELECT NAME,TEXT FROM DBA_SOURCE WHERE NAME =‘TEST’;
6、查询到源码可以放到达梦(jdk/bin)下去编译打包
cd /home/dmdba/dmdbms/jdk/bin
vim test.java --复制5里查出来的结果,注意格式
./javac -d . test.java --编译class文件
./jar -cvf test.jar test.class --打包
7、开启dmagent服务(注册成服务,注意java环境变量)
8、设置dm.ini参数 ENABLE_EXTERNAL_CALL = 1 静态(隐藏参数),重启数据库
sp_set_para_value(2,‘ENABLE_EXTERNAL_CALL’,1);
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);
CREATE OR REPLACE FUNCTION tstr(c1 varchar)
RETURN varchar
EXTERNAL ‘/home/dmdba/dmdbms/jdk/bin/test.jar’
“test.testStr” USING java;
select tstr(‘xxx’);
文章
阅读量
获赞