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