本文以 Oracle 為例,詳細介紹 Java 預存程序的三種建立方法、部署步驟與實際呼叫測試流程,適合欲在資料庫層直接執行 Java 邏輯的開發人員參考。
SQL> CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Javademo1" AS
2 import java.sql.*;
3 public class JavaDemo1 {
4 public static void main(String[] argv) {
5 System.out.println("hello, Java demo1");
6 }
7 }
8 /
Java 已建立。
SQL> SHOW ERRORS JAVA SOURCE "Javademo1"
無錯誤。
SQL> CREATE OR REPLACE PROCEDURE Javademo1
2 AS LANGUAGE JAVA NAME 'JavaDemo1.main(java.lang.String[])';
3 /
程序已建立。
SQL> SET SERVEROUTPUT ON
SQL> CALL Javademo1();
調用完成。
SQL> CALL DBMS_JAVA.SET_OUTPUT(5000);
調用完成。
SQL> CALL Javademo1();
hello, Java demo1
調用完成。
重點: 類別方法必須為 `public static` 才能作為預存程序呼叫;需呼叫 `DBMS_JAVA.SET_OUTPUT` 啟用輸出重導向至 SQL*Plus 終端。
先將編譯好的 `.class` 檔放置 Oracle Server 目錄(如 `d:\Oracle\OracleJavaProc.class`),再建立目錄物件並載入:
SQL> GRANT CREATE ANY DIRECTORY TO scott;
SQL> CREATE OR REPLACE DIRECTORY test_dir AS 'd:\Oracle';
SQL> CREATE OR REPLACE JAVA CLASS USING BFILE(test_dir, 'OracleJavaProc.CLASS');
SQL> CREATE OR REPLACE PROCEDURE testjavaproc AS LANGUAGE JAVA NAME 'OracleJavaProc.main(java.lang.String[])';
同樣需設定 `SERVEROUTPUT` 與 `DBMS_JAVA.SET_OUTPUT` 才能看見輸出。
實務上常用 `loadjava` 命令列工具直接將 `.java` 或 `.class` / `.jar` 載入資料庫,再建立 Call Spec(呼叫規格)連結至 PL/SQL 程序,此法支援依賴管理與解析度檢查,較適合正式環境部署。