通常我們都使用 ps/ sql 為 oracle 編寫存儲過程,從 oracle 8 開始我們可以有另一種選擇: Java 。 8.0 開始, oracle 自帶一個 jvm ,內置對 java 的支持,任何 java 能做的事情你都可以放到 oracle 里面來做,你甚至可以在里" name="description" />
好消息說完了,現在是壞消息:由于ps/sql是過程化的語言,它基本上不具備多態的概念,供oracle使用的java方法必須申明為static,所以在oracle中你無法使用java的動態特性,比如接口、反射等。不過這并不妨礙你用java做愛做的事。
我們以一個簡單的hello world為例,我想任何一個有經驗的java程序員都能夠通過這個例子,派生出其他希奇古怪的應用。
首先是創建一個java類,你可以用jbuilder/eclipse來編寫,也可以直接在oracle的控制臺里面創建。前者不多說,看看后一種方式。
啟動sql plus,執行如下命令:
create or replace and compile java source named "hello_sp" as /** *創建oracle存儲過程的java類 *@author bromon **/ package org.bromon.oracle; public class Hello { public static String say(String name) { return "你好,"+name; } }
Java以創建。
然后在oracle中把這個類導入成為一個函數,執行命令: 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';
函數已創建
現在可以調用該函數,執行: select hello('bromon') from dual;
返回結果:你好,bromon
有一個需要注意的問題是,假如我們的java方法是沒有參數的,比如: public static String say() { return "你好”; }
那么在創建函數的時候,函數名不應該有擴號:hello_sp 否則會報告函數有編譯錯誤。
如果你的java類是在IDE里面編寫的,那么只需要在oracle中加載編譯過的class文件即可,方法是:
啟動enterprise manage console,在“方案”下找到“源類型”,右擊”java類”,選擇”加載java“,選擇對應的class文件即可。
原文轉自:http://www.anti-gravitydesign.com