資源描述:
《用PLSQL和Java開發(fā)Oracle8i應(yīng)用程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、用PL/SQL和Java開發(fā)Oracle8i應(yīng)用程序簡(jiǎn)介隨著Oracle8i的發(fā)布,Oracle在數(shù)據(jù)庫里支持了二種主要的編程語言——PL/SQL和Java。今天,Oracle的許多客戶既使用PL/SQL建立數(shù)據(jù)庫應(yīng)用程序,也使用Java建立數(shù)據(jù)庫應(yīng)用程序。既然存在二種數(shù)據(jù)庫編程語言,那么就有一個(gè)很自然的問題:建立Oracle8i應(yīng)用程序時(shí),PL/SQL和Java哪一個(gè)更好?我們來快速地回顧一下,PL/SQL給Oracle數(shù)據(jù)庫開發(fā)人員提供了強(qiáng)大的功能,包括:高性能、易使用、無縫地與SQL結(jié)合,以及強(qiáng)壯性?,F(xiàn)在,P
2、L/SQL依舊是一個(gè)成熟的開發(fā)數(shù)據(jù)庫應(yīng)用程序的過程性語言,而且是建立SQL密集型和數(shù)據(jù)密集型應(yīng)用程序的理想語言。隨著Oracle8i的推出,Oracle在數(shù)據(jù)庫里引入了Java,給這種十分流行的通用語言提供了強(qiáng)壯的、大規(guī)模的平臺(tái)。利用企業(yè)JavaBean和CORBA,可以用Java開發(fā)多層、面向組件的應(yīng)用程序;也可以用Java開發(fā)傳統(tǒng)的數(shù)據(jù)庫存儲(chǔ)過程。Oracle8i提供了多種特性,可以簡(jiǎn)化用PL/SQL和Java建立應(yīng)用程序的過程,而且可以容易地把二種語言編寫的應(yīng)用程序組合起來。這份白皮書,提供了有關(guān)Oracle
3、8i中PL/SQL和Java特性的技術(shù)概述,并就如何利用它們建立應(yīng)用程序提供了實(shí)際可行的指導(dǎo)。白皮書分成四個(gè)部分:由于許多Oracle客戶都有現(xiàn)存的PL/SQL應(yīng)用程序,所以,我們開始時(shí),先描述如何現(xiàn)有的PL/SQL程序與Java組合,擴(kuò)展現(xiàn)有PL/SQL程序;然后,我們描述二種語言里共有的應(yīng)用程序編程特性,解釋如何把PL/SQL和Java共同使用;在第三部分,描述怎樣利用PL/SQL和Java建立應(yīng)用程序才算最好(例如:什么時(shí)候用PL/SQL最合適,什么時(shí)候用Java最合適);最后,我們討論一些真實(shí)的例子,實(shí)際演
4、示Oracle的客戶們目前在Oracle8i里是如何使用PL/SQL和Java的。用PL/SQL和JAVA建立應(yīng)用程序開始,我們首先看一下?lián)碛蠵L/SQL應(yīng)用程序的客戶的場(chǎng)景:客戶們想在服務(wù)器里增加新的Java代碼,從而擴(kuò)充原有的PL/SQL應(yīng)用程序。有三個(gè)特別的問題需要考慮:第一,Oracle8i里支持的主要存儲(chǔ)過程類型是什么,可以用什么途徑調(diào)用它們;第二,Java在Oracle8i里如何工作,Java如何同PL/SQL互操作;第三,Oracle8i服務(wù)器如何處理PL/SQL和Java之間的名稱解析。在整個(gè)白皮書
5、里,“Java”這個(gè)單詞,既指標(biāo)準(zhǔn)的Java,也指SQLJ(Java里的嵌入SQL),只有在明確地表明討論不同概念時(shí),才表示不同的意思。Oracle8i中存儲(chǔ)過程的類型Oracle8i支持的存儲(chǔ)過程類型有幾種?Oracle8i支持四種不同類型的存儲(chǔ)過程——用PL/SQL或Java,都可以實(shí)現(xiàn)全部四種類型的存儲(chǔ)過程。這四種存儲(chǔ)過程類型是:存儲(chǔ)過程——頂級(jí)存儲(chǔ)過程允許客戶用任意商業(yè)邏輯擴(kuò)展SQL??蛻粲妹Q調(diào)用存儲(chǔ)過程,可以在SQL、PL/SQL包、以及“頂級(jí)”位置上調(diào)用存儲(chǔ)過程。存儲(chǔ)函數(shù)——存儲(chǔ)函數(shù)實(shí)質(zhì)上與存儲(chǔ)過程相
6、同,不同之處在于存儲(chǔ)函數(shù)向調(diào)用者返回值。可以用名稱調(diào)用存儲(chǔ)函數(shù),也可以在SQL、PL/SQL包、以及“頂級(jí)”位置上調(diào)用存儲(chǔ)函數(shù)。數(shù)據(jù)庫觸發(fā)器——觸發(fā)器是與特定的表和視圖關(guān)聯(lián)的商業(yè)規(guī)則,修改對(duì)表或視圖時(shí),SQL自動(dòng)調(diào)用觸發(fā)器。Oracle8i提供了幾種類型的觸發(fā)器:在SQLDML語句執(zhí)行之前或之后激發(fā)的觸發(fā)器;在每一行更新之前或之后激發(fā)的觸發(fā)器;事件觸發(fā)器(例如:登錄、退出、DDL語句、數(shù)據(jù)庫啟動(dòng)或關(guān)閉等的觸發(fā)器);替代(instead-of)觸發(fā)器。所有這些觸發(fā)器類型,都可以用PL/SQL或Java編寫。對(duì)象類型方
7、法——Oracle8?發(fā)行版8.0和Oracle8i提供了用SQL定義復(fù)合數(shù)據(jù)類型的能力。這些對(duì)象類型的方法,可以用Java實(shí)現(xiàn),也可用PL/SQL實(shí)現(xiàn)。例如,可以用SQL定義一個(gè)訂單對(duì)象類型purchase_order_t,如下所示:CREATETYPEpurchase_order_tASOBJECT(ponoNUMBER,custrefREFcustomer_info_t,orderdateDATE,shipdateDATE,line_item_listline_item_list_t,shiptoaddrad
8、dress_t,MEMBERFUNCTIONtotal_valueRETURNNUMBER,);然后實(shí)現(xiàn)這個(gè)對(duì)象類型的方法…CREATEORREPLACETYPEBODYpurchase_order_tASMEMBERFUNCTIONtotal_valueRETURNNUMBERISiINTEGER;stockstock_info_t;line_itemli