Oracle組件實現動態Web數據庫
2024-08-29 13:46:33
供稿:網友
[摘 要] 本文簡要介紹實現Web數據庫的基本方法,討論了利用Oracle的服務器選件之一WebServer結合PL/SQL和相關內置程序包實現動態Web的基本方法,并給出了一簡單示例。
隨著計算機互連網絡的發展,Internet正成為世界各地進行信息交流的主要方式之一。作為Internet的一個重要組成部分,全球信息網WWW(World Wide Web)采用Html形式組織信息,并用超鏈結的方式進行各種信息的集成與傳遞,具有界面友好,操作簡單等特點,用戶可直接利用Web瀏覽器進行方便的瀏覽、查詢各種信息。因此,作為各機構組織和企業展示信息的窗口,Web服務器所能提供的信息量和功能就直接影響到其自身的形象和客戶訪問量。
在傳統的Web服務器中,文本和其他信息都是以文件的形式來進行存儲和治理的,向用戶瀏覽器所提供的網頁也大多是靜態的。當用戶在瀏覽器中輸入HTML文檔的URL時,則訪問一個在WebServer上的文件,它只有在某個網絡治理員在Web服務器上放置一個同名的新文件時才改變內容。隨著WWW的應用領域的拓展,靜態Web頁也越來越不能滿足信息服務的動態性、實時性和交互性的要求,這就要求將數據庫技術與WWW 結合起來,以實現對數據資源的高效存取。
1、 用Oracle WebServer構建Web數據庫應用
Oracle 8服務器是一個完善的信息治理環境。它是一個大量數據的儲藏所,并給用戶提供對這些數據的快速訪問。它能夠支持C/S結構進行分布式處理和Web計算等。利用其服務器選件之一的WebServer,可以提供實現Web數據庫應用的強大功能。
一般來說,實現Web數據庫應用可以在WebServer端提供CGI/API等中間件來連接WebServer 和DB Server,也可以讓用戶通過Web瀏覽器把相關應用下載到客戶端運行,在客戶端直接訪問數據庫,如java Applet,Active X,Plug-in等。本文主要介紹利用Oracle 8 提供的PL/SQL和其功能強大的內置程序包來編寫程序以實現動態的Web應用。屬于利用中間件開發的一種。中間件負責治理WebServer和DBServer之間的通信并提供給用程序服務,它能夠直接調用外部程序或腳本代碼來訪問數據庫,因此可以提供與數據庫相關的動態HTML頁面,或執行用戶查詢,并將查詢結果格式化成HTML頁面再通過WebServer返回給用戶瀏覽器。其一般結構如下所示:
Web瀏覽器 ←→ Internet ←→ Web Server ←→ CGI/API ←→ Oracle DB Server
2、 PL/SQL
Oracle從其版本6開始支持一種過程處理語言PL/SQL,并將其作為所有Oracle工具的標準編程語言,從而所有的過程組件在Oracle服務器產品中都能實現。用PL/SQL可以實現下述重要功能:
存儲過程,即存放在Oracle數據庫中的程序(或代碼段)并為你的機構完成特定的重要工作;
數據庫觸發器,即存放在數據庫中的代碼,可由應用所產生的事件觸發;
程序包,即把多個過程組合在一起當作單個程序單元的代碼存放在數據庫中。
其中內置程序包是預先生成的,存儲在數據庫中,且能在PL/SQL代碼塊中調用的根據需求可以傳遞參數的程序。它可以完成把結果直接輸出到終端窗口;直接從操作系統文件讀寫數據;執行動態的SQL等多項功能。常用的如HTP,HTF,OWA-UTIL等。下面將通過一個動態的網上查詢分數的實例來說明其在動態Web中的應用。
3、 利用WebServer和PL/SQL開發動態Web實例
現有一考生成績庫需在網上向用戶提供查詢成績的功能。首先可考慮利用HTP程序包根據用戶輸入的考生號到數據庫中查詢相應的信息,返回一個網頁。代碼如下:
Create or replace PRocedure score_into_webpage (code_in in number)
As
cursor score_cursor is
select code,name,score
from student
where code = code_in;
Begin
Htp.htmlopen;
Htp.headopen;
Htp.title ('Student's score information');
Htp.headclose;
Htp.bodyopen (cattributes=>'bgcolor = "#80800"');
Htp.tableopen(border');
Htp.tablecaption ('Score Information','center');
Htp.tablerowopen;
Htp.tableheader (' Student Code');
Htp.tableheader (' Student Name');
Htp.tableheader (' Student Score');
--固定地顯示頁標題、標題、表頭等信息,每次調用此頁時顯示的信息
--是相同的
Htp.tablerowclose;
For score_rec in score_cur
Loop
--利用游標的For循環為游標在網頁中產生一個數據行
htp.tablerowopen;
htp.tabledata (score_rec.code);
htp.tabledata (score_rec.name);
htp.tabledata (score_rec.score);
htp.tablerowclose;
Endloop;
Htp.tableclose;
Htp.bodyclose;
Htp.htmlclose;
End;
通過以上代碼,我們有了一個基本的用數據庫中的數據動態的生成一個網頁的方法,下面將建立一個簡單的表單。
在表單中調用上述程序和接受用戶輸入的考生號碼,從而在客戶端向用戶動態地顯示從數據庫中查詢的信息。
Create or replace procedure ScoreForm
As
Begin
Htp.headopen;
Htp.title ('Code Entry Form');
Htp.headclose;
Htp.bodyopen;
Htp.header (2,'Score Information Code Form');
Htp.p ('
');
Htp.formopen ('Score_into_webpage',cmethod=>'GET');
--打開ScoreForm表單。缺省情況下Score_into_webpage PL/SQL過程用GET
--方法調用。GET方法在URL里顯示傳遞的參數。
Htp.tableopen ('border');
Htp.tablerowopen;
Htp.tabledata ('Enter Student Code');
Htp.tabledata (htf.formtext ('code_in',5,5));
--用一個文本框提示用戶輸入考號。文本框的名字必須與調用過程里的輸入
--參數相同。
Htp.tablerowclose;
Htp.tablerowopen;
Htp.tablerowclose;
Htp.tablerowopen;
Htp.tabledata (htf.formSubmit);
Htp.tabledata (htf.formReset);
Htp.tablerowclose;
Htp.formclose;
Htp.bodyclose;
Htp.htmlclose;
End;
上述過程在客戶端被調用后產生的HTML即可顯示一動態表單接受用戶輸入的考號,然后傳遞給調用的過程score_into_webpage,從而到Oracle DBServer中查詢出所需的數據,再通過該過程動態生成的HTML在Web瀏覽器中顯示出來。
4、 結束語
作為一個大型數據庫服務器,Oracle提供了一個面向網絡的開發工具、應用服務器和數據庫服務器的綜合平臺。本文利用其標準PL/SQL和內置程序包并結合WebServer討論了基本的動態Web的開發和應用。