即興的靈感

          思維是一種藝術(shù); 藝術(shù)需要靈感。

          博客好友

          最新評論

          JAVA與Oracle存儲過程(二)

          ??????在前一篇文章中簡單介紹了JAVA程序如何調(diào)用Oracle存儲過程的基本語法程序結(jié)構(gòu),?本文將介紹JAVA跟Oracle的另一種關(guān)系,即通過JAVA編寫Oracle存儲過程 通常情況下,我們都是使用Oracle數(shù)據(jù)庫系統(tǒng)中的ps/sql語句來oracle編寫各種存儲過程,不過,在Oracle的第八個版本8之后,為我們提供了編寫存儲過程的另一種新的選擇,那就是使用JAVA來編寫Oracle存儲過程。從Oracle8.0版本開始,在Oracle數(shù)據(jù)庫系統(tǒng)中自帶了java虛擬機jvm,因此使得Oracle內(nèi)置了對JAVA的全面支持,我們在使用JAVA可以實現(xiàn)的任何功能現(xiàn)在都可以放到Oracle中來實現(xiàn),當(dāng)然我們也可以在oracle中來操作其他數(shù)據(jù)庫。JAVA的加入讓Oracle展能力得到了升華,我們可以定義一個觸發(fā)器來在進行任何數(shù)據(jù)庫操作的時候?qū)ν饨邕M行其他操作的功能。
          ???下面準(zhǔn)備舉個例子來說明下如何通過JAVA來創(chuàng)建Oracle存儲過程,例子不在于有多高級,功能不在于多完善,我想,如果能從一個簡單例子,引申出去,去繁衍更多的方法,去實現(xiàn)更多你自己需要的功能,這才是簡單例子的作用。所以,認(rèn)為我寫的簡單,寫的膚淺的人你可以不用看,但是我寫出來就是為了讓任何有JAVA基礎(chǔ)的人都能容易懂得,而從簡單的例子去構(gòu)造出其他的應(yīng)用。個人認(rèn)為,中國軟件界更需要有的程序員素質(zhì),就是能更多幫助那些初學(xué)者,讓他們少走彎路,才能讓我國的IT行業(yè)有更好的發(fā)展,對那些將初學(xué)者的問題拒之千里之外的程序員的做法,在此表示遺憾....
          ???當(dāng)然,以上是題外話,但是希望能引起大家的思考,,,,能引起在我博客話我發(fā)的內(nèi)容簡單的人的反思。。。
          ???二、使用JAVA創(chuàng)建Oracle存儲過程
          ???先看下如何使用JAVA來編寫Oracle存儲過程,我們在Oracle的sql plus中編寫語句。
          ???Ⅰ、啟動SQL PLUS
          ???Ⅱ、編寫JAVA類,定義JAVA類別名,本存儲過程為簡單地輸出傳入?yún)?shù)的平方值。

          ? create?or?replace?and?compile?java?source?named? "PF" ?as

          /**

          ?*通過JAVA類來 創(chuàng)建Oracle存儲過程

          ?*

          **/

          package ?org.oraclejava.pro;

          public ? class ?javaCreatePro

          {

          ? public ? static ? String ?test( int num)

          ?{

          ??? return ?num+ "的平方為: " +num*num;

          ?}
          }


          ???Ⅲ、將JAVA類中的方法test創(chuàng)建為一個Oracle函數(shù)方法
          create?or?replace?function?PF_FUN(name?integer)?return?varchar2?as?language?java?name?'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer)?return?java.lang.String';?
          ???Ⅳ、在控制臺直接調(diào)用創(chuàng)建的Oracle函數(shù)

          ? select?PF_FUN(10)?from?dual;

          ???Ⅴ、輸出結(jié)果
          10的平方為:100

          ???以上即是在Oracle中的SQL PLUS中使用JAVA程序來產(chǎn)生Oracle存儲過程的演示例子,演示了其基本語法的實現(xiàn)跟簡單的功能實現(xiàn),可以看出在JAVAOracle之間存在很多有趣的用法,因為oracle中有java虛擬機,使得Oracle變得更加有趣更加豐富多彩。

          ?????????????????????????????????????????? 轉(zhuǎn)載請注明出處!



          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
          ???? 隱姓埋名/低調(diào)華麗/簡單生活/完美人生

          posted on 2008-12-07 23:00 poetguo 閱讀(8531) 評論(13)  編輯  收藏 所屬分類: OracleJAVA

          評論

          # re: JAVA與Oracle存儲過程(二) 2008-12-08 07:59 beyond

          oracle 真牛,支持  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二) 2008-12-08 09:38 caliven

          十分感謝  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二) 2008-12-08 10:15 分享愛的空間

          很有意思,也開闊了我的思路,原來還可以這樣使用oracle,這樣看來,可以解決很多實際應(yīng)用的問題,比如當(dāng)某個記錄發(fā)生變化時,可以給外面發(fā)個信號,用于做一些事情。
          之前,總認(rèn)為我們只能主動去調(diào)用oracle,現(xiàn)在看來oracle也可以自動調(diào)用外面的一些服務(wù)。
          我也寫了一遍oracle存儲過程的文章(http://www.aygfsteel.com/jiangjf/archive/2007/12/05/165514.html)
          多交流。  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二)[未登錄] 2008-12-08 16:41 zxbyh

          其實lz應(yīng)該講一哈為什么要用Java的存儲過程,而不用Pl-sql的存儲過程.

          各自適合什么情況..  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二) 2008-12-11 23:09 wenlin

          DB2也可以,SQL Server 也行啊  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二) 2010-09-01 11:17 612

          受教了,樓主說的好!
          將JAVA類中的方法test創(chuàng)建為一個Oracle函數(shù)方法,貌似這個方法不太對?警告: 創(chuàng)建的函數(shù)帶有編譯錯誤。  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二) 2011-05-06 16:14 xiaofen

          頁面顯得太亂啦  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二) 2011-06-01 14:42 擇業(yè)玩家

          NB  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二)[未登錄] 2011-07-21 09:17 michael

          create or replace function PF_FUN(name number) return varchar2 as
          language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String';

          Integer 改為number 可編譯通過,但是執(zhí)行的時候,提示無java類  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二)[未登錄] 2012-11-30 10:43

          樓主代碼無法通過系統(tǒng),找不到JAVA建立的CLASS方法  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二)[未登錄] 2012-11-30 10:52

          樓主不太負(fù)責(zé),首先語法就有問題,在ORACLE中根本就不能用INTEGER類型表示整形,改成NUMBER后,編譯JAVA通過了,但調(diào)用時候根本找不到CLASS,推測是樓主沒有測試代碼,按自己想象的天馬星空,太不嚴(yán)謹(jǐn)了。我們初學(xué)者苦惱。
          真不知道,那些稱贊樓主的人,有沒有自己去運行一遍代碼啊????  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二)[未登錄] 2012-11-30 12:19

          確切的說是找到了類,但找不到類中的方法:test
          --------------
          哪位兄弟,指點一下,樓主的代碼中,哪出問題了????
          有網(wǎng)友誰說過,ORACLE中的JAVA,方法命名很重要,不要用"main"來命名方法名,說改了方法名后,就能調(diào)用了。但此處,樓主用的是 test 方法名,而且是靜態(tài)的,符合要求的。  回復(fù)  更多評論   

          # re: JAVA與Oracle存儲過程(二)[未登錄] 2012-11-30 15:59

          知道原因了,樓主以上代碼有2處錯誤,導(dǎo)致無法正確運行。

          仔細(xì)觀察包裝語句(即將JAVA包裝成ORACLE函數(shù)FUNCTION)
          ---------------------------------------------
          create or replace function PF_FUN(name integer) return varchar2 as language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String';

          錯誤1:function PF_FUN(name integer) --ORACLE中沒有integer類型
          該錯誤導(dǎo)致:無法編譯。
          改正為:function PF_FUN(name number)

          錯誤2:org.oraclejava.pro.javaCreatePro.test(java.lang.Integer)
          此處在關(guān)聯(lián)JAVA類中的方法,回到JAVA源碼一看讓人啼笑皆非
          改正為:org.oraclejava.pro.javaCreatePro.test(int)
          -----------------------

            回復(fù)  更多評論   

          主站蜘蛛池模板: 诸暨市| 会同县| 巫山县| 清水县| 浪卡子县| 留坝县| 沙洋县| 海门市| 南木林县| 江山市| 八宿县| 锡林郭勒盟| 鹤岗市| 宜阳县| 深泽县| 运城市| 磐安县| 丰镇市| 大田县| 沈丘县| 东乡县| 莆田市| 龙口市| 繁峙县| 武安市| 盐池县| 天峨县| 临清市| 天门市| 灵丘县| 屏东县| 秭归县| 长岭县| 开阳县| 上虞市| 监利县| 泽库县| 南陵县| 岑溪市| 房产| 太康县|