專題報導 - 快速建構 Oracle 網頁應用程式系統 31
快速建構 Oracle 網頁應用程式系統
--使用 Oracle PL/SQL Web 開發工具
沈玉升
國立中興大學計算機及資訊網路中心
台中市 402 國光路 250 號(04-22840306 轉 724)
E-Mail:ysshen@nchu.edu.tw
所謂 Oracle 網頁應用程式是指用 Oracle 工具程式存取 Oracle 資料庫的網
頁應用程式。目前我們較常見的 ASP、PHP、JSP 等都有提供資料庫連接支援。
但對以 Oracle 資料庫為基礎所開發的組織內各類資訊系統而言,選擇與資料庫
密切配合的 Oracle 網頁開發工具,更能有效率的發揮資料庫資料計算與網站存
取瀏覽的資訊展現速度。
本文將略述選擇用 PL/SQL 當開發網頁應用系統的考量點、Oracle Web 應用
程式的執行機制、資料庫伺服端的 PL/SQL Web Toolkit 簡介、WEB /應用程式伺
服端必須設定的 DAD(Database Access Descriptor)環境設定以及手寫 PL/SQL
應用程式的開發流程等。並用一個應用實例擷取片段,在 WIN/NT 平台上示範,看
完本章,即使您是個網頁應用程式新手,也可輕易著手建構您的系統了。
一、為何選擇用 PL/SQL 開發網頁?
目前 Oracle 提供的開發工具有 Java Servlet、PL/SQL Web Toolkit、
Designer、Portal 或使用 Developer 的 Forms 和 Reports 等五種基本方式來開
。
發網頁程式 上述開發工具各有使用上的優缺點, 您必須根據實際的應用系統需
求來選擇. 以下幾個因素可供在網頁開發工具的選擇評量上參考:
1. 使用者群屬性。
2. 使用者介面的複雜度。
3. 系統開發時限。
4. 開發者對工具的熟悉度。
因此若您要建構的系統使用者來至網際網路、非專業使用、使用者介面只需
提供資料查詢瀏覽或單純的資料登錄維護作業(不需做到滑鼠控制等) 、有開發
時間上的壓力、對 Java 不熟悉、但熟悉 PL/SQL 程式語言與基本的 HTML 網頁資
料展現格式等特性,那選擇使用以 HTML 為基礎的 PL/SQL Web Toolkit 當作網頁
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 32
應用程式的開發工具應是個不錯的決定。
二、Oracle Web 應用程式的執行機制:
一個完整的 Web 系統包括了客端的瀏覽器,中間層的 web/應用伺服器
(Application server),以及後端資料庫伺服器(Database server)等 3 層架構。
其中 web/應用伺服器端是用來與 Web 瀏覽器溝通,及執行應用程式的應用程式伺
服器。後端資料庫則儲存以 HTML 為基礎,使用 Oracle PL/SQL Web 套裝軟體函數
或程序呼叫方式寫的儲存程式碼(Stored Procedures),這些程式碼產生一系列
的網頁供瀏覽器顯示。開發這種應用程式碼較簡易,只要您熟悉 Oracle 的
PL/SQL 語言,對 HTML 的資料格式及瀏覽器如何呈現的視窗控制有基本的認識 ,
就可很輕易上手寫 web 應用程式。
本文範例安裝的是 Oracle 9i Application Server 1.0.2/NT2000 版本,
安裝選[Oracle HTTP Server only],為 Oracle9i 應用程式伺服器的主要
元件,Web server 是直接與瀏覽器溝通的元件,其溝通的方法是使用 HTTP
(HyperText Transport Protocol),目前 Oracle 新的版本都是使用標準 Apache
Web server。在我們所開發的應用程式裡,Apache HTTP servr 為固定的檔案提
供服務,這些檔案包括固定的 HTML 檔案或影像檔等。換句話說,您寫的 HTML 檔案
或影像檔必須放在 Web 主機端,儲存程式必須放在資料庫端。
Web server mod_jserver Apache Jserv
(Apache
Web server
HTTP OracleJSP
mod_ose Java
server)
Mod_cgi mod_plsql PL/SQL
mod_cgi Form server
Report server
Database
Oracle9i 應用程式伺服器的主要元件
在此以 PL/SQL Web 應用程式實例(請參考「範例說明」單元) 的執行流程來
簡略說明運作機制:
1. 當使用者要求一個 Web 網頁(鍵入或點選一個 URL)時.如畫面鍵
入 http://shen/schair/index.html
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 33
2. HTTP server 收到 index.html 裡有呼叫執行 pls/schair 的 PL/SQL
儲存程序請求時(Request),就會將這個請求送至 Apache 的 mod_plsql
模組。由的登入系統原始碼可知,此網頁使用 HTML form method
接收變數的方式將值傳給 action="/pls/schair/tedp_chk"
3. mod_plsql 模組使用包含在 URL 的設定需求,由 DAD(Database Access
Descriptor)決定用哪個資料庫帳號簽入後驅動該資料庫端的儲存程
序。
4. 接收的請求會傳給資料庫的儲存程序(Stored PL/SQL Procedure)處理,
執行的結果利用 PL/SQL Web Toolkit 的 HTP 套裝軟體產生 HTML 文件
格式送出給 Web server,轉送至瀏覽器展示。
三、PL/SQL Web Toolkit 簡介
由上述單元的執行流程可知,在您叫用 PL/SQL 網頁應用程式前,Web Toolkit
套裝軟體需先載入系統,如此您寫的 PL/SQL 網頁應用程式才能在資料庫端執
行。PL/SQL Web Toolkit 包括 2 大類:
1. htp 和 htf 套裝軟體:用來產生 html 標籤格式的輸出結果。此套裝軟體包含
使用到的 PL/SQL 資料類別,程序及函式呼叫等,與 HTML3.2 版本指令一對一對
應,用來將資料庫端抓取的資料利用該套裝軟體產生動態 html 網頁輸出。
如下左邊「呼叫 Procedure」指令,是存在資料庫端的程序程式,其執行後的輸出
結果如右邊的「產生 html」展示在瀏覽器上。
呼叫 Procedure 產生 HTML
Procedure show
Begin Overview
htp.htmlOpen; Hello Word
htp.header(1,’Overview’);
htp.print(‘Hello Word’); 基本網頁展現
htp.para;
htp.bold(‘基本網頁展現’);
htp.htmlclose;
End;
2. owa 套裝軟體:字首 OWA_開頭的套裝軟體用來處理資料庫伺服端與 web 應用伺
。
服端間的 http 溝通 包括 owa_cookie/cookie 設定,owa_image/影像按鈕方位
操控,owa_opt_lock/資料庫記錄鎖定,owa_pattern/字串搜尋,owa_sec/安全
機制,owa_text/大量字串處理,owa_util/軟體工具等函式或程序呼叫。以下
是 cookie 設定的儲存程序 owa 使用範例:
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 34
procedure schair_setcookie (v_cookie_name VARCHAR2,
v_cookie_val VARCHAR2,
v_close VARCHAR2 DEFAULT 'CLOSE')
IS
BEGIN
owa_util.Mime_Header('text/html',FALSE);
owa_cookie.Send(v_cookie_name,v_cookie_val);
IF v_close = 'CLOSE' THEN
owa_util.Http_Header_Close;
END IF;
END;
您可使用以下 SQL 指令來列出上述套裝軟體名稱,以確認 PL/SQL Web
Toolkit 是否安裝成功:
select owner,object_name
from dba_objects
where object_type=’PACKAGE’
and (object_name like ‘HT%’or object_name like ‘OWA%’);
四、建 DAD 來啟動資料庫相關程式執行
在 Oracle HTTP server 上選 mod_plsql 模組,建一個 DAD(Database Access
Descriptor)紀錄,作為 PL/SQL web 應用程式呼叫資料庫服務時用哪個資料庫帳
號簽入,以驅動該資料庫端的儲存程序。以下是 DAD 名稱為 schair 的步驟:
1.在瀏覽器上鍵入:
http://shen/
點選 mod_plsql.
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 35
2.點選:
閘道 Database Access
Descriptor 設定
3.點選:
新增預設 (空白的組態)
4.新增 schair DAD
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 36
五、手寫 PL/SQL 網頁應用程式
當您已將使用者系統環境設定完成後,接著就可撰寫您的網頁應用程式了。只
要有一般的文書編輯器就可開始動工。以下是網頁的撰寫流程:
1. 應用程式設計:
以 HTML 為基礎的 web 應用程式使用 http 通訊協定,因此在設計網頁間的流
程時必須考慮到 http 運作的特性限制。例如 http 的運作是”stateless”,
server 端無法辨認請求者的身分,因此必須建立系統登入機制以辨認呼叫者的
身份。目前是使用 cookie 儲存使用者帳號密碼在 client 端,並在每個被呼叫的
程序程式裡作 cookie 檢查。
由於 web 網頁的運作模式是使用者叫用一個 URL 進入系統,從網頁接收資料,接著
web 等待使用者下達下一個點選按鈕或輸入相關訊息,因此明確的畫出每個網頁
間的連接流程,定義所有的模組功能及傳遞參數是有必要的。
2.網頁設計:
依據上一個步驟畫出的應用系統流程圖,設計 HTML 網頁。當然您可用記事本
完成所有的 HTML,但選擇視覺化的 HTML 軟體編輯器(像 Macromedia Dreamwaver)
來設計您的網頁畫面以產生 html 程式碼會更有效率。
3.轉換:
將 html 程式碼改寫成使用 PL/SQL 儲存程式,只需將每行的 html 用單引號’
括起來,由 htp.print 來呼叫就完成了。如下例:
htp.print('');
htp.print(''||'');
htp.print('Table 查詢/維護');
htp.print('');
htp.print('登出系統');
htp.print('');
4.加入動態邏輯程式:
將 pl/sql 相關的資料計算指令嵌入程式中。
六、範例說明
以下 web 應用程式範例是用來查詢資料庫相關 table 系統文件紀錄。在此擷
取相關網頁及程式碼片段來說明使用 PL/SQL 寫成的應用程式開發步驟。
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 37
1.入口網站呼叫,接收帳號密碼:
畫面鍵入 http://shen/schair/
說明:內定值是呼叫 web server 端的
\apache\apache\htdocs\schair\index.html 網頁
其中 shen 是 HTTP server 的主機名稱,schair 是在 htdoc 文件根目錄下
(由 http.conf 所定義的
DocumentRoot"c:\isuites\Apache\Apache\htdocs")
所建的應用程式存放目錄,除了 PL/SQL 儲存程序存放在資料庫,其餘的
web 應用程式檔案均放在此目錄下。
2. index.html 網頁原始碼製作:
圖二的原始碼內容.
說明:1. 使用相對位址呼叫 rose.bmp 圖檔,因
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 38
此此檔必須放在 htdocs 文件根目錄下的 schair 子目錄才能被呼叫到 。
2.此行敘述會將
變數傳送到資料庫端,啟動 DAD 所定義的 oracle 使用者 schair 登入
資料庫去執行 tedp_chk 程序。其中 /pls 是由 httpd.conf 呼叫
plsql.conf 所定義的虛擬路徑,由 mod-plsql 用來呼叫相關的 PL/SQL
工具處理。
3.資料庫端的 PL/SQL 儲存程序:
procedure TEDP_CHK(v_empl varchar2,v_pass varchar2)
IS
begin
schair_setcookie('cookie_pass',upper(v_pass),'NOCLOSE');
schair_setcookie('cookie_empl',upper(v_empl),'NOCLOSE');
owa_util.Redirect_Url(owa_util.Get_Owa_Service_Path||'table_frame');
end;
PL/SQL 儲存程序程式.
說明:由 index.html 所接收的 v_empl 變數傳給 tedp.chk 程序去做 client 的帳
號及密碼 cookie 設定。接著 owa_util.Redirect_Url 呼叫資料庫端執行
table_frame 程序,該程序呼叫使用目錄供點選。
4.網頁點選資料輸入:
變數讀取
說明:1.在畫面上方點選[TABLE 查詢及維護] 即出現如圖五網頁,等候輸入變
數。拉選[應用系統]欄位選擇 scahir,字串輸入欄鍵入 ‘shfcode’,再按
[執行查詢]。
2.以下程序片段是此網頁的參數傳遞,接收,及執行等內容:
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 39
PROCEDURE TABLE_QRY(v_emp varchar2 default null) PL/SQL 參數傳遞
IS
sel_name varchar2(12) ;
v_selno varchar2(7);
v_date varchar2(8);
v_date1 varchar2(8);
p_target varchar2(1);
p_sys varchar2(10);
p_tab varchar2(20);
cookie_status varchar2(1) default 'N';
-系統代碼:p_sys 搜尋動態網頁記錄
cursor c2 is
select '*' sys_code,'全部' sys_name from dual
union
select sys_code,sys_code||' '||nvl(rtrim(sys_name),'?') sys_name
from tabowner;
begin 輸入資料變數讀
……..
htp.FormSelectOpen('p_sys','應用系統:'); 取,接收,及執行
FOR c2_rec IN c2 LOOP
htp.FormSelectOption(c2_rec.sys_name,cattributes=>'VALUE="'||c2_rec.sys_c
ode||'"');
END LOOP;
htp.FormSelectClose;
htp.print('Table 或 View 或 Column 等之 中英文名稱 字串搜尋:');
htp.FormText('v_qrystr',24,24,'');
htp.formsubmit(cvalue=>'執行查詢');
htp.formclose;
end;
5.查詢結果顯示:
變數讀取查詢結果
中興大學計資中心技術通訊第 17 期
專題報導 - 快速建構 Oracle 網頁應用程式系統 40
6.資料維護作業:
資料維護作業
七、結語:
使用 PL/SQL 撰寫的 WEB 應用程式其優點是存取資料庫速度快,特別適合處理
大量的資料運算,但只能用專屬於 Oracle 資料庫與它的應用程式伺服器,無法移
植到其他不同的資料庫或 WEB 伺服器。若您將來有更換不同的 WEB 伺服器或資料
庫而不更動 WEB 應用程式的考量,那選擇 Java 或許會較有彈性,相對的其存取資
料庫速度較慢。
八、參考文獻:
1. 謝金興譯,Oracle 網頁應用 101,麥格羅‧希爾國際出版。
2. ORACLE,Administrator Oracle9i Application Server Student Guide,2001。
3. ORACLE,Oracle Web Application Server:Develop Web-Based Applications
student Guide。
4. ORACLE,Oracle Web Application Server Cartridge User’s Guide R3。
中興大學計資中心技術通訊第 17 期