iT邦幫忙

0

用oracle PL/SQL寫java程式有錯誤

HI 各位大大好

我參考了下面這個文章,想要寫一個UDP發送的功能
https://www.cnblogs.com/ser0632/p/4920154.html

java程式

create or replace and resolve java source named udp
as
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class udp {
    public static String send(String ip,String port,String msg){
        try{
            int int_port=Integer.parseInt(port);    //字串轉數字
            DatagramSocket ds = new DatagramSocket();
            DatagramPacket dp = new DatagramPacket(msg.getBytes(), msg.length(), InetAddress.getByName(ip), int_port);
            ds.send(dp);
            ds.close(); // 關閉連接
            return "Successfully";
        }catch(Exception e){
            return "Failed";
        }
    }
}

function

create or replace FUNCTION  udpsend(
  p_ip   in varchar2,--IP地址
  p_port in varchar2,--port
  p_msg  in varchar2 --訊息内容
) return varchar2 is
language java name 'udp.send(java.lang.String,java.lang.String,java.lang.String) return java.lang.String';

但我執行function的時候,會出現以下錯誤

ORA-29516: Aurora 主張失敗: Assertion failure at eoxdebug.c:105
jondsp_init_i_ds is not yet implemented
ORA-06512: 在 "USER.UDPSEND", line 1
ORA-06512: 在 line 11

想請問有什麼解決方法嗎
資料庫版本 oracle 12c(Release 12.2.0.1.0 - 64bit Production)

1 個回答

0
pojen
iT邦新手 1 級 ‧ 2020-12-06 00:19:12

教程本身是正確的. (當然權限問題不在討論內容)

https://ithelp.ithome.com.tw/upload/images/20201206/20033353rSwHsEC13J.png

從 google 上看, 問題似乎出在 java 版本上. (因為你直接用 ORACLE_HOME 裡面的 jdk 做編譯, 所以不存在不同版本相容問題) 我唯一的建議是打上 OJVM 補丁然後再試試. 另外為了避免各種權限問題, 我贊成教程作者第一次測試時使用 sys. 上生產線前搞定權限就好

另外, 確認下你的 jdk 版本:
$ORACLE_HOME/jdk/bin/java -version

我的測試環境是 19.9 OEL7 PDB (202010RU), ORACLE_HOME 的 jdk 版本是 jdk8u261

ice bear iT邦新手 4 級 ‧ 2020-12-07 09:46:44 檢舉

HI pojen 大大你好
$ORACLE_HOME/jdk/bin/java -version 的版本是

java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b61)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b61, mixed mode)

另外想問一下 唯一的建議是打上 OJVM 補丁然後再試試
這句話是什麼意思? 抱歉 我是oracle的新手不太明白,再麻煩解惑了謝謝

ice bear iT邦新手 4 級 ‧ 2020-12-07 11:21:56 檢舉

HI pojen 大大你好
另外我有看到這篇,想問問你oracle執行的平台是?
因為我是用windows,不知道是不是這個原因....
https://community.oracle.com/tech/developers/discussion/4118579/assertion-failure-at-eoxdebug-c-due-to-datagramsocket

pojen iT邦新手 1 級 ‧ 2020-12-08 00:49:12 檢舉

Oracle 有每季補丁. 補丁通常有四個, Database (DB), Grid Infrastructure (GRID), Oravle Java VM (OJVM) 與 ACFS. 一般來說如果是單機 Oracle, 那只需要 DB 補丁. 但偶而遇到奇怪的 Java 錯誤就需要 OVJM 補丁. 我遇過因為 DB 補丁打上後資料庫無法開啟, 解決方案是同步打上 OVJM 補丁. 所以最新的 DB 補丁開始加入 OJVM. (唯一的問題是大部分的 OVJM 補丁需要重啟資料庫, 這對於資料庫管理員來說是很討厭的事)

我的環境是 Oracle (Enterprise) Linux 7.9x64 (kernel 5.4.17-2036)

只在 windows 上出現? 這是有可能的, 但唯一的方案大概是打補丁. (試過開技術支援要求, SR 嗎? 他們應該可以給你更具體的建議)

我要發表回答

立即登入回答