首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

在Oracle中使用Java編寫存儲過程:從Hello World到實戰擴展

     編輯:Oracle 資料庫基礎

背景與限制

  • Oracle 8i+內建JVM,支援Java存儲過程
  • 限制:PL/SQL無多態概念,呼叫Java方法必須宣告為static,無法使用介面、反射等動態特性
  • 優勢:極大擴展能力 (網路、檔案、外部資料庫、郵件、即時通訊等)

步驟一:建立Java Source (SQL*Plus方式)

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "hello_sp" AS
PACKAGE org.bromon.oracle;
PUBLIC CLASS Hello {
  PUBLIC STATIC STRING say(STRING name) {
    RETURN "你好," + name;
  }
};

步驟二:發佈為PL/SQL呼叫規格 (Callable Spec)

CREATE OR REPLACE FUNCTION hello_sp(name VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'org.bromon.oracle.Hello.say(java.lang.String) return java.lang.String';

關鍵對應:Java String ↔ PL/SQL VARCHAR2,參數/回傳類型完整限定名。

步驟三:測試呼叫

SELECT hello_sp('bromon') FROM dual;
-- 結果: 你好,bromon

進階:無參數方法的特殊處理

Java方法無參數時,PL/SQL函數不可帶括號:

-- Java
public static String say() { return "你好"; }

-- PL/SQL (錯誤)
CREATE OR REPLACE FUNCTION hello_sp() RETURN VARCHAR2 ...  -- 編譯錯誤

-- PL/SQL (正確)
CREATE OR REPLACE FUNCTION hello_sp RETURN VARCHAR2 ...  -- 無括號

替代部署方式:IDE編譯後載入Class檔

  1. Eclipse/JBuilder編寫並編譯Java類
  2. Enterprise Manager Console → 方案 → 源類型 → Java類 → 右鍵「載入Java」 → 選擇.class檔
  3. 後續發佈Callable Spec步驟相同

實戰擴展想像空間

  • 觸發器發送MSN/Email/簡訊通知
  • 呼叫Web Service同步異構系統
  • 檔案系統操作 (讀寫CSV、產生報表)
  • 連接DB2/MySQL/PostgreSQL等外部資料庫
  • 加密/解密、數位簽章、PDF產生

提醒:Java存儲過程在資料庫JVM執行,受JAVA_POOL_SIZE限制,大量運算需調整;且需授予JAVAUSERPRIV、JAVASYSPRIV等權限。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved