问答/ 问答详情 /

外部函数fun load fail

w 2025/04/01 122 6

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8
【操作系统】:麒麟v10 aarch
【CPU】:
【问题描述】*: 写了一个java外部函数,打包成jar,执行的时候遇到fun load fail,请问如何定位具体问题? 中间打包了很多次,偶尔又可以运行,但后来修改了代码,再打包又不行了。

回答 6
Y丶Charles

1.打开创建外部函数参数sp_set_para_value(2,'ENABLE_EXTERNAL_CALL',1); --参数需要重启生效
2.服务器也要开dmagent代理
注册)启动代理服务
cd /home/dmdba/dmdbms/tool/dmagent
[root]# ./service.sh install
几个回车
service DmAgentService completed.
[root]# su - dmdba
cd /home/dmdba/dmdbms/tool/dmagent/service
修改启动脚本,配置JDK变量
vi DmAgentServiceexport export JAVA_HOME=/home/dmdba/dmdbms/jdk

./DmAgentService start

3.创建jar包目录(dmdba)
mkdir -p /home/dmdba/dmdbms/bin/external_jar

4.创建java外部函数(注意加粗部分)
CREATE OR REPLACE FUNCTION testa(a varchar)
RETURN varchar
EXTERNAL '/home/dmdba/dmdbms/bin/external_jar/lyc.jar'
"com.dameng.externfunction.test.testa" USING java;

CREATE OR REPLACE FUNCTION tesAdd(a int,b int)
RETURN int
EXTERNAL '/home/dmdba/dmdbms/bin/external_jar/lyc.jar'
"com.dameng.externfunction.test.testAdd" USING java;

5.执行调用
-- 然后正常调用即可
select tesAdd(1,2)
select testa('aa');

附java代码


public class test {

    static int num = 0;

    public static int testAdd(int a, int b) {
        System.out.println("a="+a+",b="+b);
        return a + b;
    }

    public static String testStr(String str) {
        return str + " hello";
    }
    public static int testStatic(String str) {
        System.out.println("testStatic"+1111);
        num++;
        return num;
    }

    public static int testError(String str) {
        //int a = 1/0;
        return num;
    }

    public static String testa(String args) throws  Exception{

        return args+"_aa";
    }

}

发布于 5天前
扫一扫
联系客服