歡迎您光臨本站 註冊首頁

使用Java編寫Oracle存儲過程

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0

通常我們都使用Ps/SQL為Oracle編寫存儲過程,從Oracle 8開始我們可以有另一種選擇:Java.8.0開始,Oracle自帶一個JVM,內置對Java的支持,任何Java能做的事情你都可以放到Oracle裡面來做,你甚至可以在裡面操作db2.這讓Oracle具備了極其巨大的擴展能力,只要你願意,完全可以開發一個trigger,讓它在適當的時候給管理員的msn發送一條即時消息.

好消息說完了,現在是壞消息:由於ps/SQL是過程化的語言,它基本上不具備多態的概念,供Oracle使用的Java方法必須申明為static,在Oracle中你無法使用Java的動態特性,比如介面、反射等.不過這並不妨礙你用Java做愛做的事.

我們以一個簡單的hello world為例,我想任何一個有經驗的Java程序員都能夠通過這個例子,派生出其他希奇古怪的應用,有好的創意記得要與我共享,我的msn是

是創建一個Java類,你可以用Jbuilder/Eclipse來編寫,也可以直接在Oracle的控制台裡面創建.前者不多說,看看后一種方式.

啟動SQL plus,執行如下命令:

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;      }    } 

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文件即可.


[火星人 ] 使用Java編寫Oracle存儲過程已經有257次圍觀

http://coctec.com/docs/java/show-post-61674.html