為何選擇 Java 預存程序
- Java 開發者熟悉 JDBC,無需學習 PL/SQL(Pascal 風格語法)。
- DB2、PostgreSQL 等亦支援 Java 預存程序,跨資料庫可移植性較高。
- 強型別、豐富生態、IDE 支援完善。
關鍵差異點
- 安全沙箱:禁止存取作業系統資源(檔案、網路等)。
- 連線取得:
Connection conn = new OracleDriver().defaultConnection(); 使用隱含連線,無需帳密。
- 標準輸出重導向:
System.out 需透過 dbms_java.set_output() 導向用戶端。
Hello World 完整步驟
1. 建立 Java Source
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED TestJava1 AS
public class TestJava1 {
public static void test() {
System.out.println("Hello");
}
};
2. 建立 CALL SPEC(預存程序進入點)
CREATE OR REPLACE PROCEDURE testJava1
AS LANGUAGE JAVA NAME 'TestJava1.test()';
3. 啟用輸出並呼叫
SET SERVEROUTPUT ON;
CALL dbms_java.set_output(2000);
EXEC testJava1();
4. 結果驗證
Hello
PL/SQL procedure successfully completed
進階應用場景
- 資料驗證與轉換邏輯下推至資料庫層,減少網路往返。
- 複雜批次運算靠近資料執行,提升效能。
- 封裝跨表業務規則,確保資料一致性。
注意事項
- 修改 Java 類別後需重新編譯並替換資料庫中的類別。
- 大量運算或長時間執行可能佔用資料庫進程資源,謹慎評估。
- 除錯較困難,建議先在外部 JVM 完整測試後再部署。