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;
}
};
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 ... -- 無括號
提醒:Java存儲過程在資料庫JVM執行,受JAVA_POOL_SIZE限制,大量運算需調整;且需授予JAVAUSERPRIV、JAVASYSPRIV等權限。