Oracle 資料庫自 8i 版本起便支援將 Java 類別儲存於資料庫內部,使其能作為 PL/SQL 的替代或補充方案。開發者可撰寫 Java 程式並將其部署為資料庫觸發器、預存程序、函數,甚至物件的成員方法。一旦完成部署,這些 Java 預存程序即可從 SQL 或 PL/SQL 中直接呼叫,使用方式與原生 PL/SQL 程序無異。
將 Java 程式整合至 Oracle 資料庫主要分為三個階段:
CREATE OR REPLACE JAVA SOURCE 命令或 LOADJAVA 工具將編譯後的類別載入 Oracle 8i/9i 以上版本。可直接在 SQL*Plus 中建立原始碼;若已具備編譯好的 .class 檔,可略過此步驟直接進入發布階段。
SQL> CREATE OR REPLACE JAVA SOURCE NAMED "Hello" AS
public class Hello {
static public String Message(String name) {
return "Hello, " + name;
}
}
/
Java created.
使用 AS LANGUAGE JAVA 子句將靜態方法 Hello.Message 映射為名為 hello 的 PL/SQL 函數。
SQL> CREATE OR REPLACE FUNCTION hello (name VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'Hello.Message(java.lang.String) return java.lang.String';
/
Function created.
發布完成後,即可像呼叫普通函數一樣使用它:
SQL> SELECT hello('world!') FROM dual;
HELLO('world!')
----------------
Hello world!
Oracle 8i 版本對中文支援有限,自 9i 起可正確處理中文字元:
SQL> SELECT hello('你好!') FROM dual;
HELLO('你好!')
------------------
Hello, 你好!
VARCHAR2 ↔ java.lang.String、NUMBER ↔ java.math.BigDecimal 等,詳見 Oracle 官方文件。掌握此機制,即可在資料庫層引入豐富的 Java 類別庫功能(如正則表達式、複雜運算、外部 API 整合),大幅擴展 PL/SQL 的表達能力。