Cơ sở dữ liệu (viết tắt CSDL; tiếng Anh là database) được hiểu theo cách định nghĩa kiểu kĩ thuật thì nó là một tập hợp thông tin có cấu trúc. Tuy nhiên, thuật ngữ này thường dùng trong công nghệ thông tin và nó thường được hiểu rõ hơn dưới dạng một tập hợp liên kết các dữ liệu, thường đủ lớn để lưu trên một thiết bị lưu trữ như đĩa hay băng. Dữ liệu này được duy trì dưới dạng một tập hợp các tập tin trong hệ điều hành hay được lưu trữ trong các hệ quản trị cơ sở dữ liệu.
2. Sau đây là một số ưu diểm mà CSDL mang lại: - Giảm sự trùng lặp thông tin xuống mức thấp nhất. Do đó đảm bảo thông tin có tính nhất quán và toàn vẹn dữ liệu. - Đảm bảo dữ liệu có thẻ được truy suất theo nhiều cách khác nhau - Nhiều người có thể sủ dụng một cơ sở dữ liệu.
3.Những vấn đề mà CSDL cần phải giải quyết.
- Tính chủ quyền của dữ liệu.
Thể hiện ở phương diện an toàn dữ liệu.Khả năng biểu diễn mỗi liên hệ ngữ nghĩa của dữ liệu và tính chính xác của dữ liệu.Người khai thác cơ sở dữ liệu phải cập nhật cho CSDL những thông tin mới nhất.- Tính bảo mật và quyền khai thác thông tin của người sử dung.
Do ưu điểm CSDL có thể cho nhiều người khai thác đồng thời. nên cần phải có một cơ chế bảo mật phân quyền khai thác CSDL.Các hệ điều hành nhiều người sử dụng hay cục bộ đều cung cấp cơ chết này.- Tranh chấp dữ liệu.
Khi nhiều người cùng truy nhập CSDL với các mục đích khác nhau. Rất có t hể sẽ xảy ra hiện tượng tranh chấp dữ liệu.Cần có cơ chết ưu tiên khi truy cập CSDL. Ví dụ: admin luôn có thể tru cập cơ sở dữ liệu.Cấp quyền ưu tiên cho từng người khai thác.- Đảm bảo an toàn dữ liệu khi có sự cố.
Khi CSDL nhiều và được quản lý tập trung. Khả năng rủi ro mất dữ liệu rất cao. Các nguyên nhân chính là mất điện đột ngột hoặc hỏng thiết bị lưu trữ.Hiện tại có một số hệ điều hành đã có cơ chế tự động sao lưu ổ cúng và fix lỗi khi có sự cố xảy ra.Tuy nhiên: cẩn tắc vô áy náy. Chúng ta nên sao lưu dự phòng cho dữ liệu đề phòng trường hợp xấu xảy ra.
93 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 1976 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Cơ sở dữ liệu bằng Web, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hµng lo¹t m¸y tÝnh tõ khi tiÕp nhËn
vµ quay trë l¹i th«ng tin mét c¸ch thµnh c«ng cho ®Õn khi t×m ®−îc ®Õn ®Ých.
TiÕn tr×nh nµy ®−îc gäi lµ routing lµ c¬ së chñ yÕu cho toµn bé viÖc kÕt nèi
m¹ng, vµ bÊt kú m¸y tÝnh nµo trong “chuçi dÉn ®−êng” hoµn thµnh viÖc truy
cËp d÷ liÖu.
I.4 Qu¶n trÞ Web Server
§Ó gióp ®ì viÖc qu¶n lý Web site, Oracle Web Server cung cÊp mét tËp
hîp trang Web cã thÓ sö dông chóng ®Ó tiÕn hµnh lµm nhiÖm vô qu¶n lý mét
c¸ch cã hiÖu qu¶ nhÊt. Cã nh÷ng trang ®¬n gi¶n lµ so¹n th¶o nh÷ng files cÊu
h×nh Web Server sö dông, b¹n cã thÓ sö dông c«ng cô kh¸c ®Ó säan th¶o files
mét c¸ch trùc tiÕp.
I.5 Giao diÖn CGI
Mét c«ng nghÖ chuÈn ®−îc sö dông bëi Web Listener thùc hiÖn mét
ch−¬ng tr×nh ngoµi nh− (c, perl) sinh ra HTML Doccument.
I.6 PL/SQL Agent
§©y lµ ch−¬ng tr×nh Oracle WebServer sö dông ®Ó thùc hiÖn nh÷ng thñ
tôc ®−îc viÕt trªn PL/SQL, øng dông cña Oracle trªn Oracle7 Server.
---------------------------------------------------------------------------------------------
Trang 54
Tiªu ThÞ Dù K39KTT
H×nh 2.1 KiÕn tróc Oracle Web Server
Any
Browser
Web Listener
Web
Request
Brocker
Live
HTML
Java
PL/SQ
L
Oracle 7
Video
Server
Context
Server
Oracle Web Server
WRB*API
File CGI
Static
File
Perl
Navigator
PowerBrowser
explorer
SS
L
II Nguyªn t¾c ho¹t ®éng cña Oracle Web Server
Oracle WebServer lµ mét HTTP víi mét c¬ së d÷ liÖu kh«ng ®Þnh tr−íc.
Khi WebServer tiÕp nhËn mét URL tõ Browser trªn WWW hoÆc tõ m¹ng côc
bé sö dông giao thøc Web, nã chøa ®ùng th«ng tin tõ c¬ së d÷ liÖu hay file hÖ
thèng cÇn thiÕt ®Ó tr¶ lêi yªu cÇu. HÖ thèng file sö dông Static Web pages, hay
cho CGI Script. C¬ së d÷ liÖu sö dông cho trang Web sinh ra mét “live” data.
Server Web Listener chÊp nhËn mét URL tõ Web Browser vµ göi ra ngoµi khi
Web Listener tiÕp nhËn URL. Web listener x¸c ®Þnh c©u hái vµ sö dông nh÷ng
dÞch vô truy cËp th«ng qua WRB (Web Request Brocker) mét ch−¬ng tr×nh
®−îc truy cËp b»ng CGI Interface hay truy cËp th«ng qua file hÖ thèng cña
c«ng nghÖ trªn Listener.
Khi Web Browser göi yªu cÇu d−íi d¹ng URL tíi Web Listener, Web
Listener sÏ tiÕp nhËn ph©n tÝch URL vµ x¸c ®Þnh dÞch vô thùc hiÖn yªu cÇu
hoÆc th«ng qua WRB. NÕu yªu cÇu mét tµi liÖu tÜnh th× tµi liÖu ®ã sÏ ®−îc lÊy
---------------------------------------------------------------------------------------------
Trang 55
Tiªu ThÞ Dù K39KTT
tõ hÖ thèng files. NÕu yªu cÇu lµ giµnh cho mét øng dông cña CGI th× tiÕn
tr×nh CGI sÏ ho¹t ®éng. NÕu Web Listener kh«ng ®¸p øng ®−îc yªu cÇu th× sÏ
göi qua WRB sau ®ã WRB sÏ göi yªu cÇu ®ã tíi Cartridger nh− PL/SQL, Java,
LiveHTML. NÕu WRB truy cËp ngoµi th× Listener sÏ th«ng qua c©u hái cho
WRB Dispatcher cho mét tiÕn tr×nh, sau ®ã quay trë l¹i gi¶i quyÕt nhiÖm vô .
WRB Dischaper tù thùc hiÖn yªu cÇu víi sù gióp ®ì cña mét “xÝch”
(pool) cña tiÕn tr×nh ®−îc gäi ®ã lµ ®−îc gäi lµ WRB Executable Engines
(WRBXs). Mét giao diÖn kh¸c WRBX lµ quay trë l¹i sö dông øng dông WRB
API. Cã nh÷ng øng dông ®−îc gäi lµ WRB cartridges. WRB API ®v ®−îc thiÕt
kÕ . Sù kÕt hîp gi÷a mét Cartridges vµ WRB API t¹o ra mét WRB Service.
Th«ng th−êng th× cã 3 lo¹i dÞch vô mµ Oracle WebServer hç trî lµ :
• PL/SQL Cartridges : Thùc hiÖn c¸c thñ tôc PL/SQL sinh mv HTML ®ång
thêi sö dông Oracle Data.
• Java cartridges : Thùc hiÖn Java trªn Server.
• Live HTML : HiÖn ra Web page. Web page ®−îc thùc hiÖn bëi HÖ ®iÒu
hµnh.
Web
Browse Listener Pl/sql
Java
<body
>.
WRB
1
6
2
5
3
4
H×nh 2.2 Oracle Web Server Work
Gi¶i thÝch h×nh 2.2
1. Web Browser ®−a ra yªu cÇu URL cho Web Listener
---------------------------------------------------------------------------------------------
Trang 56
Tiªu ThÞ Dù K39KTT
2. Web Listener göi yªu cÇu tíi WRB
3. NÕu PL/SQL ®−îc chän th× sÏ mãc nèi vµo c¬ së d÷ liÖu
4. Thñ tôc PL/SQL sÏ sinh tµi liÖu HTML
5. PL/SQL Agent th«ng qua tµi liÖu HTML tíi Web Listener
6. Web Listener göi tµi liÖu HTML tíi Browser
II.1 The Web Listener (OWL)
Oracle Web Listener lµ mét giao thøc truyÒn th«ng HTTP. Web
Listener cã nhiÖm vô tiÕp nhËn yªu cÇu tõ Web Browser göi ®Õn WRB vµ sau
®ã l¹i nhËn kÕt qu¶ ®Ó göi tr¶ cho Browser. Cho phÐp xö lý ®ång thêi nhiÒu c©u
hái trong cïng thêi gian th«ng qua chuÈn HTTP hay HTTP trªn SSL. Web
Listener vµ Web Client kÕt nèi víi nhau th«ng qua giao thøc HTTP.(H×nh vÏ
2.3)
Web
Browser
Oracle
Web
Listener
CGI
Interface
Static
Doccument
Pages
File System
Traditional Static
File Access
HTTP Request
(URLs)
HTM
L
Oracle WebServer
H×nh 2.3 Oracle Web Listener
Mçi tiÕn tr×nh Oracle Web Listenner ®Òu chÊp nhËn kÕt nèi nhiÒu Web
Browser trªn mét hay nhiÒu ®Þa chØ IP/ hoÆc cæng kÕt hîp sö dông HTTP ®Ó
gi¶i mv yªu cÇu tõ siªu v¨n b¶n vµ giao thøc ®iÒu khiÓn truyÒn th«ng TCP/IP
(Transmission Control Protocol) /giao thøc Internet (Internet Protocol) ®−îc
sö dông nh− mét giao thøc kÕt nèi líp d−íi. Mét sè tiÕn tr×nh Web Listener cã
thÓ ch¹y trªn mét m¸y vµo cïng mét thêi ®iÓm.
---------------------------------------------------------------------------------------------
Trang 57
Tiªu ThÞ Dù K39KTT
Th«ng th−êng khi Web Listener më mét file ®v ®−îc yªu cÇu, File sÏ më vµ
¸nh x¹ vµo bé nhí trong cho ®Õn khi Clients sö dông xong vµ kÕt thóc nã. Web
Listener sÏ ®ãng file vµ gi¶i phãng memory mapping kÕt nèi víi nã. Web
Listener cho phÐp x¸c ®Þnh râ c¸c file ë trong cache. Cached file sÏ më khi
client yªu cÇu chóng.
VÒ vÊn ®Ò an toµn d÷ liÖu, Oracle Web Listener cho phÐp t¹o file ¶o hay
th− môc ¶o bëi Authentication Scheme hay Restriction Scheme ®Ó b¶o vÖ
chóng.
II.1.1 Authentication Scheme
Khi mét file hay mét th− môc ®−îc b¶o vÖ bëi Authentication Scheme,
mét Client cã nhu cÇu truy cËp th× ph¶i cung cÊp Username vµ Password. VËy
th× Authentication Scheme cho phÐp t¹o tªn cña ng−êi dïng (nhãm ng−êi
dïng) vµ Password cña hä.
Web Listener hç trî hai Authentication Scheme ®ã lµ: Basis Authentication
vµ Digest Authentication. C¶ hai l−îc ®å ®Òu chÝnh x¸c, Digest
Authentication th× göi password tõ Client ®Õn Server d−íi d¹ng mv ho¸ ®−îc
gäi lµ Digest ng−îc víi Basis Authentication th× göi password kh«ng hÒ mv
ho¸ nh− vËy ®é an toµn sÏ bÞ gi¶m ®¸ng kÓ.
Mét vµi Web browser kh«ng hç trî Digest Authentication, nh−ng c¸c file vµ
th− môc ®ßi hái Authentication, v× vËy nªn sö dông digest authentication bÊt
cø khi nµo cã thÓ.
II.1.2 Restriction Scheme
Tr−êng hîp mét file hay mét th− môc ®−îc b¶o vÖ bëi Restriction
Scheme, th× chØ Client ®ang truy cËp Web Listener tõ mét nhãm an toµn míi
cã thÓ truy cËp nã. Cã hai Restriction Scheme mµ Web Listener hç trî ®ã lµ
IP-based restriction vµ Domain-based restriction.
---------------------------------------------------------------------------------------------
Trang 58
Tiªu ThÞ Dù K39KTT
+ IP-based restriction: Cho phÐp ®Þnh nghÜa nhãm an toµn ®−îc ®¸nh dÊu bëi
IP address.
+ Domain-based restriction: Ng−îc víi IP-based restriction, cho phÐp ®Þnh
nghÜa nhãm an toµn bëi DNS host hay Domain name.
Ngoµi vÊn ®Ò an toµn Oracle Web listener cßn hç trî nh÷ng dÞch vô kh¸c nh−
chóng cã thÓ duy tr× mét vµi kiÓu cña tµi liÖu ë nh÷ng d¹ng kh¸c nhau vµ cung
cÊp cho Client nh÷ng d¹ng mµ chóng yªu cÇu.
VÝ dô nÕu Client yªu cÇu tµi liÖu b»ng tiÕng Ph¸p, Web Listener sÏ kiÓm tra
xem cã Version tiÕng Ph¸p kh«ng, nÕu cã sÏ göi tr¶ kÕt qu¶ cho Client, ng−îc
l¹i nÕu kh«ng cã sÏ tr¶ kÕt qu¶ ngÇm ®Þnh, th«ng th−êng lµ tiÕng Anh.
Mét Client cã thÓ yªu cÇu tµi liÖu cña mét kiÓu ®Æc biÖt Multipurpose
Internet mail Extensions (MINE). NÕu Web Listener cã thÓ t×m thÊy mét file
yªu cÇu trong yªu cÇu kiÓu MINE , nã sÏ tr¶ l¹i kiÓu ®ã cho Client ng−îc l¹i
nã sÏ tr¶ l¹i kiÓu cña file cã cì nhá nhÊt.
H¬n n÷a Web Listener cã thÓ duy tr× kiÓu cña tµi liÖu ®−îc mv ho¸ bëi
ch−¬ng tr×nh nÐn. VÝ dô nÕu mét client cã thÓ gi¶i nÐn mét tµi liÖu bÞ nÐn bëi
mét ch−¬ng tr×nh. Web Listener cã thÓ tr¶ l¹i cho Client kiÓu nÐn cu¶ tµi liÖu
thay cho viÖc gi¶i nÐn tµi liÖu ®ã.
Web Listener sö dông filename Extention ®Ó ®¸nh dÊu d¹ng cña file
víi kh¶ n¨ng miªu t¶ ng«n ng÷. KiÓu MINE, hay kiÓu mv ho¸ d÷ liÖu, dÔ dµng
h¬n cho viÖc b¶o vÖ vµ th«ng b¸o cho Clients.
Tãm l¹i viÖc sö dông Oracle Web Listener, Web site cña ta cã thÓ tr¶
lêi c©u hái cña Client bëi tµi liÖu HTML ®éng. Còng gièng nh− kü nghÖ
HTTP, Oracle Web Listener cung cÊp cho chóng ta mét giao diÖn gäi lµ Oracle
Web Request Brocker (WRB), cho phÐp Client ch¹y ch¹y ch−¬ng tr×nh trªn
Server vµ tr¶ l¹i d÷ liÖu hiÖu qu¶ h¬n CGI cho phÐp. Web Listener th«ng qua
môc ®Ých cña c©u hái cho ch−¬ng tr×nh WRB Dispacher, víi sù duy tr× b¶o vÖ
cña mét nhãm c¸c tiÕn tr×nh.
---------------------------------------------------------------------------------------------
Trang 59
Tiªu ThÞ Dù K39KTT
II.2 The Web Request Broker (WRB)
The WRB lµ c©u hái kh«ng ®ång bé thùc hiÖn víi mét øng dông API
(Application Program Interface) t¹o mét giao diÖn ®éng vµ kh«ng liÒn m¹ch
víi c«ng nghÖ “back-end” kh«ng gièng nhau ®−îc gäi lµ “ WRB Service”.
WRB bao gåm:
• WRB Dispatcher
• WRB Service
• WRB Cartridges
II.2.1 WRB Dispatcher:
Listener tiÕp xóc víi Dispatcher, mét tiÕn tr×nh ch¹y cïng Listener. Khi
tiÕp nhËn URL ®ßi hái WRB ®Ó ph©n phèi dÞch vô yªu cÇu gi÷a mét vµi tiÕn
tr×nh ®ang ch¹y nh− lµ WRBXs(Web Request Broker Excutable Engines). KÕt
qu¶ lµ Listener ®−îc gi¶i phãng ®Ó tiÕp nhËn vµ x¸c nhËn URLs cã hiÖu lùc
®ang ®−îc ®−a vµo, c¸c c©u hái kh¸c thùc hiÖn ë phÝa sau.
II.2.2 WRB Service
WRB hç trî c¸c dÞch vô nh− sau:
1. Listener tiÕp nhËn mét URL ®ßi hái WRB vµ ph©n tÝch nã ®Õn Dispatcher
2. Dispatcher t×m kiÕm mét WRBX rçi ®Ó thùc hiÖn c¸c dÞch vô
3. WRBX ®−a ra mét file mét c¸ch nhanh chãng tíi Web Listener
4. Listener phôc vô c¸c file cho Web Client sö dông HTTP.
II.2.3 WRB Cartridges
WRB API ®v ®−îc thiÕt kÕ nh− thµnh phÇn thø ba cã thÓ viÕt nh− chÝnh
Cartridge ®Ó më réng WebServer.
---------------------------------------------------------------------------------------------
Trang 60
Tiªu ThÞ Dù K39KTT
Mçi khi tiÕp nhËn URL th× cÇn gäi WRB, Web Listener thùc hiÖn hiÖn c©u hái
th«ng qua WRB Dispatcher hay Dispatcher. Dispatcher ®¶m b¶o viÖc kÕt
nèi víi mét nhãm c¸c tiÕn tr×nh gäi lµ WRBXs (Web Request Brocker
Excutable Engines). Mét giao diÖn kh¸c WRBX ®ã lµ th«ng qua WRB API tíi
mét WRB Cartridge cã thÓ cã c¸c kiÓu sau:
• The PL/SQL Agent: Thùc hiÖn nh÷ng c©u lÖnh PL/SQL chøa trong c¬ së d÷
liÖu. Nh×n mét c¸ch l¹c quan th× nã cã thÓ tèt h¬n Java Cartridge nh−ng l¹i
kh«ng cã tÊt c¶ nh÷ng chøc n¨ng mµ Java cã.
• The Java Interpreter: Thùc hiÖn Java trªn Server sinh ra trang Web ®éng.
Cã thÓ thùc hiÖn PL/SQL thiÕu Java nÕu sö dông Cartridge nµy.
• The Live HTML Interpreter: §©y lµ sù thi hµnh trªn ph¹m vi réng cña c«ng
nghÖ Server Side Includes. Víi Live HTML cã thÓ tÝnh ®Õn c¶ trang Web
®−a ra ngoµi víi bÊt kú mét ch−¬ng tr×nh nµo cña hÖ ®iÒu hµnh còng cã thÓ
thùc hiÖn ®−îc.
Sù kÕt hîp gi÷a Cartridge vµ WRB API t¹o thµnh mét WRB Service. WRBXs
lµ mét tr−êng hîp ®Æc biÖt cña WRB Services. Cã ba kiÓu dÞch vô WRB t−¬ng
øng víi 3 WRB Cartridge trong khi WRBXs ®v t¹o vµ ph¸ huû nã tuú theo
c«ng viÖc.
Dispatcher t¹o vµ b¶o vÖ WRBXs, d÷ liÖu th«ng qua mét WRBX bao gåm:
• The URL khëi sù mét qu¸ tr×nh
• Ng«n ng÷ mong −íc cña kÕt qu¶
• Ký tù mong −íc cña mét kÕt qu¶ (Ng«n ng÷ ®v ®−îc mv ho¸ vÝ dô nh−
ISO hay Unicode)
• BiÕn m«i tr−êng CGI cho phÐp cho phÐp WRB Cartridge ch¹y mét øng
dông ®−îc viÕt bëi CGI.
• NÕu c©u hái dÝnh d¸ng ®Õn viÖc sö dông PL/SQL Agent th× DCDs
(Database Connection Descriports) ®−îc sö dông.
---------------------------------------------------------------------------------------------
Trang 61
Tiªu ThÞ Dù K39KTT
Dispatcher liªn tôc ®iÒu chØnh c«ng viÖc t¶i sè l−îng WRBXs ®ang ch¹y
trong thêi gian cho phÐp, ®èi t−îng khai b¸o chÝnh. Cã nh÷ng khai b¸o
®−îc ®Æt bëi ng−êi qu¶n trÞ WebServer, ng−êi quyÕt ®Þnh sè l−îng WRBXs
ch¹y lµ lín nhÊt hay nhá nhÊt. Dispatcher t¹o mét t¹o mét WRBXs theo
yªu cÇu vµ kÕt nèi chóng víi dÞch vô WRB phï hîp. Dispatcher gi÷ dÊu vÕt
cña WRBXs ®ang thùc hiÖn yªu cÇu vµ WRBXs tù do. WRBXs l¾p r¸p c¸c
tiÕn tr×nh ®¬n ®Ó liªn l¹c víi WRB Dispatcher sö dông c¬ chÕ dßng d÷ liÖu
phï hîp víi hÖ ®iÒu hµnh (nh− lµ mét PIPE trong UNIX).
Oracle
Web
Listener
Dispatcherr
Dynamically created files
WRB
Cartridge
WRB
Cartridge
WRB Request
H×nh 2.4 Web Request Broker
II.3 rcure Socket Layer (SSL)
Lµ mét chuÈn an toµn trªn m¹ng. Cã 3 khÝa c¹nh an toµn ®ã lµ:
1. Mv hãa: Mét c«ng nghÖ phôc vô cho viÖc mv ho¸ vµ gi¶i mv d÷ liÖu .
2. TÝnh chÝnh x¸c: Minh chøng cho sù ®óng ®¾n cña th«ng tin
3. TÝnh toµn vÑn d÷ liÖu: Mét c«ng nghÖ phôc vô cho viÖc thÈm tra l¹i toµn bé
d÷ liÖu ®v ®−îc chuyÓn giao vµ chØ d÷ liÖu ®v ®−îc chuyÓn giao trän vÑn vµ
®−îc chÊp nhËn mét c¸ch ®óng ®¾n.
ViÖc thùc hiÖn mét SSL cña Oracle Web Server sÏ cã vÊn ®Ò khi d÷ liÖu
göi tõ Server ®Õn Clients bÞ mv ho¸ ( Web Browser Programs). Oracle Web
Server ®v ®−a ra mét c¸ch kh¾c phôc lµ Server vÉn göi d÷ liÖu d−íi d¹ng bÞ mv
---------------------------------------------------------------------------------------------
Trang 62
Tiªu ThÞ Dù K39KTT
ho¸ vµ Clients cã thÓ phôc håi nh÷ng th«ng tin bÞ mv ho¸ khi tiÕp nhËn nh÷ng
th«ng tin ®ã.
Mét hÖ thèng mv ho¸ truyÒn thèng ®−îc gäi lµ hÖ thèng kho¸ bÝ mËt
(Secret-key) sö dông c¸c sè ®−îc gäi lµ khãa mv ho¸ vµ gi¶i mv th«ng tin
®−îc sö dông. HÖ thèng kho¸ bÝ mËt nµy lµ cùc kú ch¾c ch¾n.
SSL sö dông mét d¹ng cña sù mv ho¸ gäi lµ Public-key encryption ®Ó mv ho¸
vµ gi¶i mv d÷ liÖu, kh«ng gièng hÖ thèng mv ho¸ seckret-key, hÖ thèng
Public-key sö dông c¶ hai kho¸ (key pairs). Mét kho¸ ®−îc gäi lµ kho¸ c«ng
céng (Public-key) dïng ®Ó mv ho¸ th«ng tin, cßn khãa kia ®−îc gäi lµ kho¸
riªng (Private key) sö dông ®Ó gi¶i mv th«ng tin. C¶ hai khãa ®Òu lµ c¸c sè tù
do liªn hÖ chÝnh x¸c víi nhau.
NÕu muèn nhËn th«ng tin ®v ®−îc mv ho¸ sö dông kho¸ céng céng th×
®Çu tiªn lµ ph¶i ch¹y ch−¬ng tr×nh sinh ra bëi mét trong hai kho¸, sau ®ã ph¶i
c«ng bè kho¸ c«ng céng trong mét c¬ së d÷ liÖu hay mét th− môc, vµ chøa
kho¸ riªng trong mét vïng an toµn trªn m¸y tÝnh. Nh−ng nã cã mét nh−îc
®iÓm lµ sù mv hãa cña kho¸ c«ng céng phô thuéc hoµn toµn vµo ®é bÝ mËt cña
kho¸ riªng.
BÊt kú mét ai muèn göi mét th«ng tin ®v ®−îc mv ho¸ th× ®Òu ph¶i nh×n
vµo kho¸ c«ng céng trong mét th− môc, sö dông mv ho¸ th«ng tin vµ göi tíi
th«ng tin ®v ®−îc mv ho¸. ChØ cã kho¸ riªng cña b¹n míi cã thÓ gi¶i mv ®−îc
th«ng tin ®ã. V× vËy nÕu b¹n gi÷ kho¸ riªng cña b¹n mét c¸ch bÝ mËt th× kh«ng
mét ai kh¸c cã thÓ ®äc ®−îc th«ng tin cña b¹n.
Bëi v× kho¸ c«ng céng ®Ó mv hãa th× sÏ chËm h¬n kho¸ bÝ mËt
(secret-key). SSL sÏ chØ ®−îc sö dông nã khi Client ®Çu tiªn kÕt nèi vµo
WebServer ®Ó thay ®æi kho¸ bÝ mËt nã ®−îc gäi lµ mét session key, víi c¶
Client vµ Server ®Òu sö dông sù mv ho¸ vµ gi¶i mv d÷ liÖu.
---------------------------------------------------------------------------------------------
Trang 63
Tiªu ThÞ Dù K39KTT
Mét øng dông kh¸c cña sù mv ho¸ ®ã lµ sù chÝnh x¸c. Sù chÝnh x¸c sö
dông mv ho¸ kho¸ c«ng céng bao gåm viÖc sö dông ch÷ ký ®iÖn tö, c«ng viÖc
nµy t−¬ng tù nh− ch÷ ký b»ng tay.
NÕu chóng ta muèn “ký” mét tµi liÖu ®iÖn tö trong mét khu«n khæ rµng
buéc vÒ mÆt ph¸p lý, th× cÇn ph¶i tiÕn hµnh víi c¶ hai kho¸. §Çu tiªn ph¶i ch¹y
mét ch−¬ng tr×nh sinh ra ch÷ ký ®iÖn tö cã sö dông kho¸ riªng vµ tµi liÖu cña
chÝnh nã. Sau ®ã cã thÓ g¾n chÆt ch÷ ký ®iÖn tö víi tµi liÖu vµ göi nã ®i. NÕu
bÊt kú mét ai muèn tiÕp nhËn tµi liÖu ®ã th× cïng víi ch÷ ký ®iÖn tö cã thÓ sö
dông c¶ kho¸ c«ng céng cña b¹n ®Ó thÈm tra ®Æc tÝnh cña b¹n,vµ tµi liÖu ®ã
kh«ng bÞ lµ x¸o trén .
Cuèi cïng lµ viÖc chøng nhËn quyÒn (Certificates and Certifying
Cuthorities) x¶y ra khi Clients kÕt nèi vµo Website ®Ó chuyÓn giao ®ßi hái cña
chóng. Tr−íc tiªn cã thÓ kiÓm tra Username/Passwork nÕu ®óng WebServer sÏ
cÊp ph¸t quyÒn tr−íc khi sù chuyÓn giao cã thÓ tiÕn hµnh.
II.4 Qu¶n lý Web Server
The WebServer cã thÓ sö dông tõ bÊt kú mét Web Browser nµo, nã cã
nh÷ng thµnh phÇn chÝnh nh− sau:
• The Listener Pages
• The WRB Pages
• The PL/SQL Agent Pages
• The Oracle7 Server Pages
II.4.1 Listener Pages
Nhãm giao thiÖp réng nhÊt víi sù qu¶n lý ®ã lµ Web Listener. Tuy
nhiªn cã nh÷ng d¹ng chØ khi ®v nhËp ®Çy gi¸ trÞ cho nh÷ng khai b¸o cÊu h×nh
kh¸c nhau. Trõ nh÷ng trang an toµn, cÇn ph¶i ®Þnh râ l−îc ®å an toµn sÏ sö
dông bao gåm c¸c thao t¸c sau.
---------------------------------------------------------------------------------------------
Trang 64
Tiªu ThÞ Dù K39KTT
• NÕu chän Restriction th× ®Þa chØ IP hay Domain names sÏ trao quyÒn truy
cËp.
• nÕu chän Authentication th× ph¶i nhËp tªn vµ Password th× míi ®−îc truy
cËp.
II.4.2 WRB Pages
Cã nh÷ng trang ta cÇn ph¶i x¸c ®Þnh râ th− môc thùc vµ ¶o cho WRB
cartrridges thËt tèt nh− lµ sè cña WRBXs
II.4.3 PL/SQL Agent Pages
ViÖc qu¶n lý PL/SQL Agent cã nghÜa lµ qu¶n lý viÖc m« t¶ kÕt nèi c¬
së d÷ liÖu (Database Connection Descriptors(DCDs) sö dông ®Ó kiÕn thiÕt nã
vµ chØ râ khi kÕt hîp víi c¬ së d÷ liÖu.
II.4.4 Oracle7 Server Manager
Oracle7 Server lµ mét s¶n phÈm tinh vi h¬n. Nã thÝch hîp h¬n cho viÖc
qu¶n lý sö dông Oracle Server hay mét c¸ch trùc tiÕp th«ng qua ng«n ng÷
SQL.
II.5 Giao diÖn CGI
Khi Web Listener nhËn mét ®Þa chØ URL nh− mét c©u hái thùc hiÖn mét
øng dông CGI. Web Listener th«ng qua URL tíi nh÷ng tiÕn tr×nh nµy vµ kÕt
hîp víi nã th«ng qua chuÈn vµo vµ chuÈn ra, bëi vËy tiÕn tr×nh CGI cã thÓ lÊy
d÷ liÖu nhËp vµo nÕu cÇn tõ URL hay tõ chuÈn vµo (standard Input). Vµ sÏ göi
chóng ra Web Listener th«ng qua chuÈn ra (standard output) vµ Web Listener
göi cho Browser. (H×nh 2.5)
---------------------------------------------------------------------------------------------
Trang 65
Tiªu ThÞ Dù K39KTT
II.6
Web
Client Web
Server
Prog1
CGI-bin
Prog1 Prog2
HTML
HTTP Daemon
Request
H×nh 2.5Giao diÖn CGI
PL/SQL Agent
Mét WRBX sö dông PL/SQL kÕt nèi ngay lËp tøc víi c¬ së d÷ liÖu khi
nã ®v ®−îc t¹o vµ ®îi mét c©u hái ®−a vµo.§iÒu nµycho phÐp yªu cÇu ®−îc
tiÕn hµnh mét c¸ch nhanh chãng h¬n. L−îc ®å c¬ së d÷ liÖu cho phÐp WRBX
kÕt nèi vµ x¸c ®Þnh râ trong cÊu h×nh File.
II.7 X¸c ®Þnh vµ Sö dông PL/SQL
NÕu mét URL ®−a mét c©u hái chøa ®ùng s©u “OWA”. Listener hoµn
thiÖn c©u hái sö dông PL/SQL Agent. C«ng viÖc nµy sÏ th«ng qua WRB hay
CGI phô thuéc vµo ng−êi qu¶n trÞ WebServer ®v ®Æt cÊu h×nh “chØ dÉn ¸nh x¹”
(directory mappings) nh− thÕ nµo. Khi ®ã PL/SQL Agent sÏ thùc hiÖn øng
dông viÕt bëi PL/SQL vµ tr¶ l¹i d¹ng HTML cho WebListener ®−a ra trang
Web.
Khi mét URL chøa ®ùng PL/SQL Agent, nã bao gåm mét DCD
(Database Connection Descriptor). DCD x¸c ®Þnh c¶ hai ®Æc quyÒn truy nhËp
c¬ së d÷ liÖu PL/SQL Agent khi thùc hiÖn yªu cÇu vµ l−îc ®å ho¸.
C¸c thñ tôc PL/SQL tån t¹i trong c¬ së d÷ liÖu. PL/SQL Agent bao hµm c©u
lÖnh ®−îc ®−a tíi c¬ së d÷ liÖu, Sau ®ã tiÕn hµnh thùc hiÖn vµ göi ra ngoµi vµ
th«ng b¸o tr¹ng th¸i trë l¹i cho PL/SQL Agent.
---------------------------------------------------------------------------------------------
Trang 66
Tiªu ThÞ Dù K39KTT
B. X©y dùng ch−¬ng tr×nh truy nhËp c¬ së d÷ liÖu
theo giao diÖn CGI
Nh− ®v nãi ë trªn ch−¬ng tr×nh CGI (Common GateWay Interface) lµ
c«ng nghÖ chuÈn ®−îc sö dông bëi mét Web Listener dïng HTTP Server ®Ó
thùc hiÖn mét ch−¬ng tr×nh sinh ra tµi liÖu d¹ng HTML. VÝ dô ta cã thÓ viÕt
mét ch−¬ng tr×nh CGI ®Ó thùc hiÖn viÖc l−u tr÷ vµ lÊy d÷ liÖu tõ mét hÖ c¬ së
d÷ liÖu bÊt kú d−íi nhiÒu d¹ng kh¸c nhau kÓ c¶ d−íi d¹ng nhÞ ph©n (file ¶nh )
tøc lµ hoµn toµn cã thÓ thao t¸c víi c¬ së d÷ liÖu th«ng qua Web.
Cô thÓ víi hÖ c¬ së d÷ liÖu ORACLE cho phÐp mçi User cã thÓ kÕt nèi
víi CSDL b»ng chÝnh tªn m×nh ®v ®¨ng ký hoÆc ch¹y PL/SQL vµ giao diÖn víi
Oracle7 Server. §Æc biÖt lµ chóng ta cã thÓ viÕt mét ch−¬ng tr×nh CGI b»ng
nhiÒu ng«n nh− C/C++, COBOL. . . mµ qua Web ta cã thÓ Select, Insert,
Update . . d÷ liÖu tõ mét Table nµo ®ã trong c¬ së d÷ liÖu. Nh÷ng ch−¬ng tr×nh
CGI nh− vËy ®−îc gäi lµ OCI (Oracle Call Interface). §Ó viÕt mét ch−¬ng tr×nh
OCI cã thÓ tiÕn hµnh theo c¸c b−íc nh− sau:
• X¸c ®Þnh cÊu tróc d÷ liÖu cho phÐp kÕt nèi vµo Oracle Server nµo hay c¬ së
d÷ liÖu nµo.
• KÕt nèi vµo mét hay nhiÒu c¬ së d÷ liÖu Oracle.
• Më mét hay nhiÒu tiÕn tr×nh SQL cÇn thiÕt cho ch−¬ng tr×nh.
• X¸c ®Þnh nhiÖm vô cña SQL hay PL/SQL cho ch−¬ng tr×nh.
• §ãng c¸c Cursors
• Huû bá kÕt nèi tõ c¬ së d÷ liÖu.
Tuy nhiªn nã cã nh−îc ®iÓm nhá lµ ng÷ tr×nh th«ng qua chuÈn CGI do
dïng c¸c biÕn m«i tr−êng nªn thùc thi chËm. Nh−ng l¹i cã −u ®iÓm lµ khi ch¹y
®−a ra kÕt qu¶ lµ tµi liÖu HTML chuÈn. §Ó kh¾c phôc nh−îc ®iÓm ®ã ng−êi ta
®v ®−a ra gi¶i ph¸p lµ dïng OWA (Oracle Web Agent)
---------------------------------------------------------------------------------------------
Trang 67
Tiªu ThÞ Dù K39KTT
I OWA - ORACLE WEB AGENT
I.1 Oracle Web Agent lµ g×
OWA lµ nh÷ng ch−¬ng tr×nh con ®−îc x©y dùng thµnh thñ tôc, hµm
mang chøc n¨ng kh¸c nhau trong PL/SQL cña Oracle. Dïng OWA ®Ó biÕn c©u
hái cña User th«ng qua c¸c Store Procedure chuyÓn thµnh trang Web vµ tr¶ l¹i
kÕt qu¶. §Ó hiÓu ®−îc tÝnh n¨ng còng nh− nhiÖm vô cña OWA tr−íc hÕt chóng
ta xem xÐt hai kh¸i niÖm HTP (Hypertext Procedure) vµ HTF (Hypertext
Function).
I.2 Hypertext Procedure (HTP)
Mét HTP ®−îc sinh ra lµ “mét dßng“ trong tµi liÖu HTML cã chøa ®ùng
nh÷ng thÎ HTML. VÝ dô Htp.anchor lµ thñ tôc sinh ra mét anchor tag. HTP
phÇn lín sÏ sö dông nh÷ng OWA.
I.3 Hypertext Function
Mét HTF tr¶ l¹i nh÷ng thÎ HTML t−¬ng øng víi chÝnh tªn cña nã. Tuy
nhiªn nã kh«ng thÝch ®¸ng ®−îc gäi lµ mét HTF bëi v× thÎ HTML kh«ng
th«ng qua PL/SQL Agent. §Çu ra cña mét HTF ph¶i th«ng qua HTP.printf
®−îc s¾p xÕp mét phÇn trong tµi liÖu HTML
Mäi HTF ®Òu t−¬ng øng víi mét HTP. MÆc dï vËy HTF ®−îc sinh ra
chØ khi ng−êi lËp tr×nh cÇn gäi ®Õn, vÝ dô :
htp.header(1,htf.italic(‘Title’));
Víi dßng lÖnh trªn htf.italic sÏ cho ta s©u ký tù Title vµ sau khi th«ng
qua htp.header th× s©u ký tù ®−îc sinh ra trong tµi liÖu HTML sÏ cã d¹ng nh−
sau:
Title
---------------------------------------------------------------------------------------------
Trang 68
Tiªu ThÞ Dù K39KTT
I.4 C¸c OWA c¬ b¶n
I.4.1 OWA_UTIL (owa_utilities)
Lµ tËp hîp cña ®Çy ®ñ tiÖn Ých thñ tôc ®Ó x©y dùng HTF & HTP. Tuú
theo môc ®Ých mµ ng−êi lËp tr×nh cã thÓ sö dông hµm hoÆc thñ tôc nµo ch¼ng
h¹n cã thÓ dïng hµm OWA_util.get_cgi_env(param_name in Varchar2) ®Ó
x¸c ®Þnh biÕn m«i tr−êng CGI ®v dïng trong ch−¬ng tr×nh, hoÆc cã thÓ dïng
thñ tôc OWA_util.showpage ®Ó x¸c ®Þnh ®Çu ra HTML cña mét thñ tôc
PL/SQL gäi tõ SQL*PLUS hay SQL*DBA,. . .
I.4.2 OWA_PATTERN (Pattern Matching Utilities)
OWA_pattern cung cÊp cho chóng ta 3 ho¹t ®éng sau ®©y:
+ MATCH: X¸c ®Þnh râ mét biÓu thøc ®v tån t¹i trong mét x©u. §©y lµ mét
hµm tr¶ l¹i gi¸ trÞ TRUE hay FALSE
+ AMATCH: §©y lµ hµm tr¶ l¹i gi¸ trÞ nguyªn vµ kÕt thóc mét x©u mµ biÓu
thøc th−êng ®v t×m thÊy. NÕu biÓu thøc kh«ng t×m thÊy sÏ tr¶ l¹i gi¸ trÞ lµ 0
+ CHANGE: Cho phÐp thay thÕ (cËp nhËt) phÇn chia cña x©u ®v ®−îc
Matched víi mét biÓu thøc th«ng th−êng vµ x©u míi. CHANGE cã thÓ lµ mét
thñ tôc hay mét hµm. NÕu lµ hµm th× tr¶ l¹i thêi gian t×m thÊy vµ thay thÕ
• OWA_TEXT (Text Manipulation Utilities)
OWA _text ®−îc sö dông chñ yÕu bëi OWA _pattern nh−ng hµm lµ
“ngo¹i hiÖn” mµ chóng ta cã thÓ sö dông chóng mét c¸ch trùc tiÕp nÕu ®v hoµn
toµn ®ång ý. VÝ dô cã thÓ cã thÓ dïng OWA_text ®Ó chuyÓn ®æi mét x©u dµi
thµnh nhiÒu dßng hoÆc cã thÓ thªm néi dung vµo mét dßng,. . .
I.4.3 OWA_COOKIE (Cookie Utilities)
Lµ mét gãi bao bäc ®Çy ®ñ ta cã thÓ göi vµ lÊy cookies tõ Client, Cookie
kh«ng râ rµng ®èi víi Client. Nã duy tr× tr¹ng th¸i th«ng qua phiªn lµm viÖc
---------------------------------------------------------------------------------------------
Trang 69
Tiªu ThÞ Dù K39KTT
cña Client. Ta cã thÓ chuyÓn ®æi th«ng tin tõ d¹ng x©u sang mét Cookie nÕu sö
dông hµm OWA_cookie.get(name), . . .
I.4.4 OWA_INIT
§©y lµ gãi chøa ®Çy ®ñ mäi th«ng tin vÒ thêi gian. Ch¼ng h¹n ta cã thÓ
®Æt tr−íc thêi gian sö dông Cookie víi giê quy ®Þnh GMT (Greenwich Mean
Time). Cookie sÏ chØ sö dông ®óng kho¶ng thêi gian ®v ®−îc ®Þnh nghÜa. NÕu
kh«ng ë trong mói giê GMT th× cã thÓ ®−a vïng thêi gian sö dông vµo.
I.5 X©y dùng ch−¬ng tr×nh
Th«ng th−êng víi mét hÖ c¬ së d÷ liÖu nÕu chóng ta muèn thao t¸c ®−îc
víi d÷ liÖu trong hÖ c¬ së d÷ liÖu th× chóng ta ph¶i trùc tiÕp sö dông hÖ c¬ së
d÷ liÖu ®ã. Ch¼ng h¹n nÕu muèn thay ®æi d÷ liÖu tõ mét Table trong HÖ qu¶n
trÞ c¬ së d÷ liÖu Oracle th× chóng ta ph¶i trùc tiÕp t¸c ®éng vµo Table ®ã th«ng
qua ng«n ng÷ SQL (Structure Query Language). Nh−ng thay v× c«ng viÖc lµ
ph¶i nhËp d÷ liÖu trùc tiÕp vµo Table b»ng c©u lÖnh Insert, hay xem d÷ liÖu
b»ng c©u lÖnh Select trong m«i tr−êng ng«n ng÷ SQL, th× ta cã thÓ x©m nhËp
vµo c¬ së d÷ liÖu ®Ó thao t¸c víi c¬ së d÷ liÖu ®ã trªn Web. Th«ng qua Web
ng−êi sö dông kh«ng cÇn biÕt m×nh ®ang sö dông hÖ c¬ së d÷ liÖu nµo, vµ nã
thùc hiÖn nh− thÕ nµo nh−ng vÉn ®¶m b¶o ®¸p øng ®óng nhu cÇu. Ch¼ng h¹n
víi ch−¬ng tr×nh FULL_TEXT (®−îc x©y dùng t¹i CSE): Lµ ch−¬ng tr×nh Tra
cøu néi dung c¸c v¨n b¶n cho Bé Ngo¹i Giao, ®−îc x©y dùng n¨m 1997 trªn
m«i tr−êng ORACLE. Ch−¬ng tr×nh cho phÐp truy nhËp ®Õn néi dung c¸c v¨n
b¶n l−u gi÷ trong Database cña Oracle, t×m kiÕm trong néi dung cña toµn bé
c¸c v¨n b¶n c¸c tõ, côm tõ vµ sau ®ã cho phÐp ng−êi dïng cã thÓ hiÓn thÞ ®Çy
®ñ toµn bé néi dung c¸c v¨n b¶n t×m ®−îc trªn Web.
§èi víi hÖ qu¶n trÞ c¬ së d÷ liÖu ORACLE, khi ng−êi sö dông nhËp d÷
liÖu th«ng qua Form giao diÖn, Web Browser tr×nh diÖn yªu cÇu ®ã lªn Oracle
Web Server. Web Listener cã nhiÖm vô “nghe“ vµ tiÕp nhËn yªu cÇu URL göi
---------------------------------------------------------------------------------------------
Trang 70
Tiªu ThÞ Dù K39KTT
vµo tõ ®©u th«ng qua cæng giao diÖn nµo, sau ®ã sÏ x¸c ®Þnh dÞch vô yªu cÇu
vµ göi tíi WRB (Web Request Broker). WRB göi yªu cÇu ®ã tíi c¸c Cartridger
nh− PL/SQL, JAVA vµ WRBXs (Web Request Broker) gäi thùc hiÖn tiÕn tr×nh
CGI. Sau khi thùc hiÖn xong tiÕn tr×nh CGI tr¶ l¹i kÕt qu¶ d÷ liÖu d−íi d¹ng mv
HTML chuÈn. WRB göi kÕt qu¶ ®ã tíi Web Listener, Web Listener göi tr¶
Web Browser, qu¸ tr×nh kÕt thóc.
Sau ®©y lµ ch−¬ng tr×nh minh ho¹, ch−¬ng tr×nh ®−îc x©y dùng nh»m
thÓ hiÖn viÖc th«ng qua Web ng−êi sö dông t¸c ®éng nh− thÕ nµo tíi c¬ së d÷
liÖu. Ch−¬ng tr×nh cã sö dông nh÷ng OWA c¬ b¶n, vµ Table ngay_sinh trong
Database DU/DU@STU. Ch−¬ng tr×nh bao gåm 1 Package demo1 víi 7 thñ
tôc sau:
• Thñ tôc thø nhÊt nhap_dk ®¶m nhiÖm chøc n¨ng t¹o mét Form giao diÖn
®Ó ng−êi dïng nhËp d÷ liÖu yªu cÇu vµ tr×nh diÖn yªu cÇu lªn Oracle Web
Server. Sau khi tr×nh diÖn lªn Server thñ tôc hien_kq sÏ ®−îc gäi b»ng c©u
lÖnh:
htp.print(‘’);
Khi nhËn ®−îc yªu cÇu Web Listener sÏ “nghe” yªu cÇu vµ göi tíi Web
Request Broker. Web Request Broker gäi ®Õn Cartridger SQL vµ t×m kiÕm
Table. Khi ®v t×m thÊy sÏ tiÕn hµnh thùc hiÖn nhiÖm vô t×m kiÕm theo yªu cÇu
vµ tr¶ l¹i kÕt qu¶:
if para is not null then
para := 'select hoten, NS from Ngay_sinh Tab1 where ' ||
para;
end if;
if para is null then
para:='select hoten, NS from ngay_sinh Tab1';
end if;
c1:=dbms_sql.open_cursor;
dbms_sql.parse(c1,para, dbms_sql.v7);
dbms_sql.define_column(c1,1,ho_ten, 30);
---------------------------------------------------------------------------------------------
Trang 71
Tiªu ThÞ Dù K39KTT
dbms_sql.define_column(c1,2,ngay_sinh);
status := dbms_sql.execute(c1);
loop
if dbms_sql.fetch_rows(c1) >0 then
ts:=ts+1;
dbms_sql.column_value(c1,1,ho_ten);
dbms_sql.column_value(c1,2,ngay_sinh);
htp.print('');
htp.print(''||Ho_ten|| '||ngay_sinh||
');
htp.print(‘’);
else exit;
end if;
end loop;
Sau khi thùc hiÖn xong thñ tôc hien_kq ®−a ra kÕt qu¶ d−íi d¹ng mv HTML
chuÈn. DÞch vô WRB Service sÏ nhËn kÕt qu¶ vµ göi tr¶ Web Listener. Web
Listener b¸o tÝn hiÖu hoµn thµnh vµ göi tr¶ Web Browser.
VÝ dô ta muèn xem tÊt c¶ nh÷ng ng−êi sinh tõ ngµy 10/10/60 ®Õn ngµy
10/10/80. NhËp ®iÒu kiÖn.
Sau khi nhËp vµo ®iÒu kiÖn xem xÐt vµ chän nót OK ta ®−îc kÕt qu¶ tr¶ vÒ
trªn Web Browser nh− sau:
---------------------------------------------------------------------------------------------
Trang 72
Tiªu ThÞ Dù K39KTT
• Thñ tôc test cã chøc n¨ng cho ng−êi dïng xem toµn bé d÷ liÖu cã trong c¬
së d÷ liÖu. Khi Web Browser tr×nh diÖn yªu cÇu tíi Web Server. Web Listener
“nghe” yªu cÇu vµ göi ®Õn WRB, sau khi WRBXs thùc hiÖn xong tiÕn tr×nh
CGI göi tr¶ kÕt qu¶ lµ c©u lÖnh tíi WRB Cartridger PL/SQL
Select * from ngay_sinh;
Sau khi thùc hiÖn xong kÕt qu¶ hiÖn lªn Web Browser nh− sau:
• Thñ tôc thø ba Form_nhap cã chøc n¨ng t¹o mét Form giao diÖn nhËn
th«ng tin cña ng−êi dïng. Khi thñ tôc nµy ®−îc gäi nã sÏ gäi tiÕp ®Õn thñ tôc
insert_data
htp.print(‘<Form
action=””>’);
Thñ tôc insert_data ®¶m nhËn chøc n¨ng tiÕp nhËn th«ng tin ng−êi sö dông
tr×nh diÖn lªn tõ Form_nhap vµ nhËp d÷ liÖu vµo c¬ së d÷ liÖu.
begin
htp.print('');
htp.print('');
insert into DU.ngay_sinh values(ten,
to_date(ngay,'dd/mm/yy'));
htp.print('§· Insert D÷ LiÖu Vµo Table ');
htp.print('');
htp.print('');
end;
Sau khi thñ tôc nµy thùc hiÖn Cartridger SQL nhËn d−îc c©u lÖnh:
insert into DU.ngay_sinh values(ten, to_date(ngay,'dd/mm/yy'));
---------------------------------------------------------------------------------------------
Trang 73
Tiªu ThÞ Dù K39KTT
VÝ dô muèn nhËp thªm d÷ liÖu vµo Table ta chØ viÖc nhËp vµo Form giao diÖn:
Sau khi ®v nhËp d÷ liÖu nhÊn nót OK th× d÷ liÖu ®−îc nhËp vµo Table
chØ ®Þnh, kÕt qu¶ tr¶ vÒ trªn Web Browser nh− sau:
• Thñ tôc nhap_dkx ®¶m nhËn chøc n¨ng t¹o mét form giao diÖn ®Ó ng−êi
dïng nhËp th«ng tin cÇn thiÕt ®Ó xo¸ d÷ liÖu theo ®iÒu kiÖn. Khi Web Browser
tr×nh diÖn yªu cÇu lªn Web Server thñ tôc hien_kqx sÏ ®−îc gäi.
htp.print(‘’);
Thñ tôc nµy cã chøc n¨ng tiÕp nhËn th«ng tin nhËp vµo tõ form ®−îc t¹o ra
trong thñ tôc nhap_dkx vµ xo¸ d÷ liÖu theo ®óng yªu cÇu nhËn ®−îc. Khi tiÕn
tr×nh CGI nhap_dkx ho¹t ®éng sÏ gäi ®Õn Cartridger SQL:
if para is not null then
para := 'delete Ngay_sinh tab where ' || para;
end if;
if para is null then
para:='delete ngay_sinh ';
end if;
cursor_name := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cursor_name, para, DBMS_SQL.V7);
ret := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
---------------------------------------------------------------------------------------------
Trang 74
Tiªu ThÞ Dù K39KTT
Sau khi thùc hiÖn xong tiÕn tr×nh CGI nµy Cartridger PL/SQL nhËn ®−îc c©u
lÖnh:
delete Ngay_sinh tab where ' || para;
VÝ dô cã thÓ xo¸ bÊt kú mét row nµo ®ã theo ®iÒu kiÖn nhËp. Ch¼ng h¹n ta
muèn xo¸ mét ng−êi cã tªn NguyÔn H÷u Th¾ng
Sau khi nhÉn nót OK Cartridger PL/SQL sÏ nhËn ®−îc c©u lÖnh
Delete ngay_sinh tab where hoten=’NguyÔn H÷u Th¾ng’;
d÷ liÖu trong Table sÏ bÞ xo¸ theo ®iÒu kiÖn hä tªn lµ La V¨n CÇu. KÕt qu¶
nh− sau:
---------------------------------------------------------------------------------------------
Trang 75
Tiªu ThÞ Dù K39KTT
KÕt luËn
Trong thêi gian lµm luËn v¨n em ®n t×m hiÓu vµ nghiªn cøu ®−îc mét sè
vÊn ®Ò hÖ qu¶n trÞ c¬ së d÷ liÖu Oracle víi Oracle Web Server, hÖ thèng Web
nãi chung vµ dÞch vô Web trªn m¹ng. Tõ ®ã t×m hiÓu c¸ch thøc khai th¸c c¬ së
d÷ liÖu th«ng qua Web. C¸ch thøc CGI truy nhËp CSDL, ®Æc ®iÓm c¬ b¶n cña
mét ch−¬ng tr×nh CGI còng nh− ph©n tÝch c¸ch thøc ho¹t ®éng cña mét
ch−¬ng tr×nh CGI vµ øng dông cña nã trong hÖ c¬ së d÷ liÖu Oracle. X©y dùng
ch−¬ng tr×nh truy nhËp c¬ së d÷ liÖu b»ng nh«n ng÷ C, vµ ch−¬ng tr×nh CGI
truy nhËp CSDL ORACLE .
V× ®iÒu kiÖn thêi gian cã h¹n nªn luËn v¨n chØ dõng ë møc nghiªn cøu
c¸ch thøc truy nhËp c¬ së d÷ liÖu b»ng ch−¬ng tr×nh ngoµi CGI vµ ®−a ra
nh÷ng vÝ dô minh ho¹ ®¬n gi¶n. Trong thêi gian tiÕp theo em sÏ tiÕp tôc nghiªn
cøu thªm mét sè ph−¬ng ph¸p kh¸c trî gióp Web Server khai th¸c c¬ së d÷
liÖu nh− ph−¬ng ph¸p ISAPI, ASP hay JAVA nh»m ®¸p øng tèi ®a yªu cÇu cña
ng−êi sö dông vµ x©y dùng nh÷ng øng dông cô thÓ.
Mét lÇn n÷a em xin ch©n thµnh c¸m ¬n toµn thÓ c¸c thµy c« gi¸o khoa
CNTT vµ toµn thÓ nh©n viªn c«ng ty CSE.
Hµ néi - 1998
Ng−êi thùc hiÖn
Tiªu ThÞ Dù
---------------------------------------------------------------------------------------------
Trang 76
Tiªu ThÞ Dù K39KTT
Phô lôc
Phô lôc 1 Ch−¬ng tr×nh nguån ktra.c xö lý Form ®−îc viÕt b»ng ng«n ng÷ C
#include
#include
#include
#include
char InputBuffer[4096] ;
typedef struct field_s
{
char *f_name ;
char *f_value ;
struct field_s *f_next ;
}
field_t, *pfield_t ;
field_t *field_list = NULL ;
void strcvrt( char * cStr, char cOld, char cNew )
{
int i = 0 ;
while ( cStr[i] )
{
if ( cStr[i] == cOld )
cStr[i] = cNew ;
i++ ;
}
}
int TwoHex2Int( char *pC )
{
int Hi, Lo, Result=0 ;
Hi = pC[0] ;
if ( '0' <= Hi && Hi <= '9' )
Hi -= '0' ;
else if ( 'a' <= Hi && Hi <= 'f' )
Hi -= ('a' - 10) ;
else if ( 'A' <= Hi && Hi <= 'F' )
Hi -= ('A' - 10) ;
Lo = pC[1] ;
if ( '0' <= Lo && Lo <= '9' )
Lo -= '0' ;
else if ( 'a' <= Lo && Lo <= 'f' )
---------------------------------------------------------------------------------------------
Trang 77
Tiªu ThÞ Dù K39KTT
Lo -= ('a' - 10) ;
else if ( 'A' <= Lo && Lo <= 'F' )
Lo -= ('A' - 10) ;
Result = Lo + 16*Hi ;
return(Result) ;
}
void urlDecode( char *p )
{
char *pD = p ;
while (*p)
{
if ( *p == '%' )
{
p++ ;
if( isxdigit(p[0]) && isxdigit(p[1]))
{
*pD++ = (char) TwoHex2Int(p) ;
p += 2 ;
}
}
else
{
*pD++ = *p++ ;
}
}
*pD = '\0' ;
}
field_t *f_newitem(char*f_name, char *f_value)
{
field_t *f_tmp = NULL ;
if((f_tmp=(field_t*)malloc(sizeof(field_t)))== NULL )
return(NULL);
if((f_tmp->f_name=(char*)malloc(strlen(f_name) ))== NULL )
return(NULL) ;
if((f_tmp->f_value=(char*)malloc( strlen(f_value) ) ) == NULL )
return(NULL) ;
strcpy( f_tmp->f_name, f_name ) ;
strcpy( f_tmp->f_value, f_value ) ;
f_tmp->f_next = NULL ;
return(f_tmp) ;
}
char *f_value( char *f_name )
{
field_t *f_tmp = NULL ;
---------------------------------------------------------------------------------------------
Trang 78
Tiªu ThÞ Dù K39KTT
if(f_name == NULL )
return(NULL) ;
f_tmp = field_list ;
while (f_tmp)
{
if ( stricmp(f_tmp->f_name, f_name ) == 0 )
return(f_tmp->f_value) ;
f_tmp = f_tmp->f_next ;
}
return(NULL) ;
}
void f_additem( field_t *f_item )
{
if ( f_item == NULL )
return ;
if ( field_list == NULL )
{
field_list = f_item ;
return ;
}
f_item->f_next = field_list ;
field_list = f_item ;
}
void StoredField( char *item )
{
char *p = NULL ;
char *field_name = NULL, *field_value = NULL ;
if ( item == NULL || *item == '\0' )
return ;
p = strchr( item, '=' ) ;
*p++ = '\0' ;
urlDecode(item) ;
urlDecode(p) ;
strcvrt( p, '\n', ' ' ) ;
strcvrt( p, '+', ' ') ;
f_additem( f_newitem(item, p) ) ;
}
int main()
{
field_t *f_tmp = NULL ;
int ContentLength ;
int x, i ;
char *p, *pRequestMethod = NULL ;
---------------------------------------------------------------------------------------------
Trang 79
Tiªu ThÞ Dù K39KTT
printf("Content-Type: text/html\n\n") ;
printf("\n\nCGI
Dump\n\n") ;
printf("CGI Dump\n\n") ;
printf("width=\"100%%\" cellspacing=\"0\" cellpadding=\"0\"
border=\"0\">\n") ;
printf("\n \n")
;
printf("Content_Length") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("CONTENT_LENGTH") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n\n") ;
printf("Content_Type") ;
printf("\n \n width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("CONTENT_TYPE") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("Gateway_Interface") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("GATEWAY_INTERFACE") ;
if ( p != NULL )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("http_accept") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("HTTP_ACCEPT") ;
---------------------------------------------------------------------------------------------
Trang 80
Tiªu ThÞ Dù K39KTT
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("http_referer") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("HTTP_REFERER") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("path_info") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("PATH_INFO") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("query_string") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("QUERY_STRING") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("remote_addr") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
---------------------------------------------------------------------------------------------
Trang 81
Tiªu ThÞ Dù K39KTT
p = getenv("REMOTE_ADDR") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("request_method") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("REQUEST_METHOD") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("script_name") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SCRIPT_NAME") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("server_name") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SERVER_NAME") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("server_port") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
---------------------------------------------------------------------------------------------
Trang 82
Tiªu ThÞ Dù K39KTT
p = getenv("SERVER_PORT") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("server_protocol") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SERVER_PROTOCOL") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n \n")
;
printf("server_software") ;
printf("\n \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
p = getenv("SERVER_SOFTWARE") ;
if ( p != NULL && *p != '\0' )
printf(p) ;
else
printf(" ") ;
printf("\n \n\n") ;
printf("\n") ;
setvbuf( stdin, NULL,_IONBF, 0 ) ;
pRequestMethod = getenv("REQUEST_METHOD") ;
if ( pRequestMethod == NULL || pRequestMethod[0] == '\0' )
{
printf("\nERROR:Request Method error\n") ;
goto error ;
}
if ( strcmp( pRequestMethod, "POST" ) == 0 )
{
p = getenv("CONTENT_LENGTH") ;
if ( p != NULL )
ContentLength = atoi(p) ;
else
ContentLength = 0 ;
if ( ContentLength > sizeof(InputBuffer) - 1 )
---------------------------------------------------------------------------------------------
Trang 83
Tiªu ThÞ Dù K39KTT
ContentLength = sizeof(InputBuffer) - 1 ;
i = 0 ;
while ( i < ContentLength )
{
x = fgetc(stdin) ;
if ( x == EOF )
break ;
InputBuffer[i++] = x ;
}
InputBuffer[i] = '\0' ;
ContentLength = i ;
if ( InputBuffer != NULL && *InputBuffer != '\0' )
printf("\n\nInputBuffer: %s\n",
InputBuffer ) ;
p = getenv("CONTENT_TYPE") ;
if ( p == NULL )
{
printf("\nERROR: content_type error.\n") ;
goto error ;
}
if ( strcmp( p, "application/x-www-form-urlencoded" ) == 0 )
{
p = strtok( InputBuffer, "&" ) ;
while ( p != NULL )
{
StoredField( p ) ;
p = strtok( NULL, "&" ) ;
}
}
}
if ( field_list == NULL )
{
printf("\nNo variables\n") ;
goto error ;
}
printf("\nVariables\n") ;
printf("<table width=\"100%%\" cellspacing=\"0\" cellpadding=\"0\"
border=\"0\">\n") ;
f_tmp = field_list ;
while (f_tmp)
{
printf("\n <td width=\"30%%\" align=\"left\"
valign=\"top\">\n") ;
---------------------------------------------------------------------------------------------
Trang 84
Tiªu ThÞ Dù K39KTT
printf(f_tmp->f_name) ;
printf(" \n <td width=\"70%%\" align=\"left\"
valign=\"top\">\n") ;
printf(f_tmp->f_value) ;
printf(" \n\n") ;
f_mp = f_tmp->f_next ;
}
printf("\n\n") ;
return(0) ;
error:
printf("\n\n") ;
return(-1) ;
}
Phô lôc 2 Ch−¬ng tr×nh nguån viÕt b»ng PL/SQL dùa trªn OWA (Oracle
Web Agent).
drop package demo1;
create package demo1 as
procedure start_pro;
procedure nhap_dk;
procedure hien_kq(ten varchar2 default null, tu_ngay varchar2 default null,
den_ngay varchar2 default null);
procedure form_nhap (ten varchar2 default null, ngay varchar2 default null);
procedure insert_data(ten varchar2 default null, ngay varchar2 default null) ;
procedure nhap_dkx;
procedure hien_kqx(ten varchar2 default null, tu_ngay varchar2 default
null, den_ngay varchar2 default null) ;
end demo1;
/
-------------------------------------------------------------------
create package body demo1 as
procedure nhap_dk is
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
---------------------------------------------------------------------------------------------
Trang 85
Tiªu ThÞ Dù K39KTT
htp.nl;
htp.nl;
htp.print('');
htp.print('');
htp.bold(' NhËp vµo c¸c ®iÒu kiÖn t×m kiÕm');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Hä vµ tªn:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Tõ Ngµy:');
htp.print('');
htp.print('');
htp.print('§Õn Ngµy:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print(' ');
htp.print(' ');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
end;
-----------------------------------
procedure hien_kq(ten varchar2 default null, tu_ngay varchar2 default null,
den_ngay varchar2 default null) is
---------------------------------------------------------------------------------------------
Trang 86
Tiªu ThÞ Dù K39KTT
c1 integer;
status integer;
ngay1 date;
ngay2 date;
ngay_sinh date;
ho_ten varchar2(30);
para varchar2(1000):=null;
dem integer := null;
ts integer:=0;
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Danh s¸ch kÕt qu¶ ');
if tu_ngay is not null then para:=para|| ' tab1.NS
>='''||to_date(tu_ngay,'DD/MM/YY')||''''; end if;
if den_ngay is not null then para:=para||'$'|| ' tab1.NS
<='''||to_date(den_ngay,'DD/MM/YY')||''''; end if;
if ten is not null then para:= para||'$'||'tab1.hoten='''|| ten||'''' ; end if;
dem:=length(para);
if (SUBSTR(para,1,1)='$') then para:=SUBSTR(para,2,dem-1); end if;
if (SUBSTR(para,dem,1)='$') then para:=SUBSTR(para,1,dem-1); end if;
para:= replace(para,'$',' AND ');
if para is not null then
para := 'select hoten, NS from Ngay_sinh Tab1 where ' || para;
end if;
if para is null then
para:='select hoten, NS from ngay_sinh Tab1';
end if;
c1:=dbms_sql.open_cursor;
dbms_sql.parse(c1,para, dbms_sql.v7);
dbms_sql.define_column(c1,1,ho_ten, 30);
dbms_sql.define_column(c1,2,ngay_sinh);
status := dbms_sql.execute(c1);
---------------------------------------------------------------------------------------------
Trang 87
Tiªu ThÞ Dù K39KTT
loop
if dbms_sql.fetch_rows(c1) >0 then
ts:=ts+1;
dbms_sql.column_value(c1,1,ho_ten);
dbms_sql.column_value(c1,2,ngay_sinh);
htp.print('');
htp.print(''|| Ho_ten||
''||ngay_sinh||'');
else exit;
end if;
end loop;
if ts <1 then
htp.print('Kh«ng t×m th©ý b¶n ghi nµo tho¶ mvn ®iÒu kiÖn ');
else
htp.print('Tæng sè b¶n ghi t×m ®−îc lµ: '||ts);
end if;
htp.print('');
htp.print('');
htp.print('');
end;
-------------------------------------
procedure form_nhap (ten varchar2 default null, ngay varchar2 default null) is
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.nl;
htp.nl;
htp.print('');
htp.print('');
htp.bold(' NhËp vµo Hä tªn , ngµy sinh');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
---------------------------------------------------------------------------------------------
Trang 88
Tiªu ThÞ Dù K39KTT
htp.print('Hä vµ tªn :');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Ngµy Sinh:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print(' ');
htp.print(' ');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
end;
-------------------------------------
procedure insert_data(ten varchar2 default null, ngay varchar2 default null)
is
begin
htp.print('');
htp.print('');
insert into DU.ngay_sinh values(ten, to_date(ngay,'dd/mm/yy'));
htp.print('§v Insert D÷ LiÖu Vµo Table ');
htp.print('');
htp.print('');
end;
---------------------------------------------------------------------------------------------
Trang 89
Tiªu ThÞ Dù K39KTT
-------------------
procedure nhap_dkx is
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.nl;
htp.nl;
htp.print('');
htp.print('');
htp.bold(' NhËp vµo c¸c ®iÒu kiÖn xo¸');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Hä vµ tªn:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Tõ Ngµy:');
htp.print('');
htp.print('');
htp.print('§Õn Ngµy:');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print(' ');
htp.print(' ');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
---------------------------------------------------------------------------------------------
Trang 90
Tiªu ThÞ Dù K39KTT
htp.print('');
htp.print('');
htp.print('');
end;
------------------
procedure hien_kqx(ten varchar2 default null, tu_ngay varchar2 default
null, den_ngay varchar2 default null) is
cursor_name INTEGER;
ret INTEGER;
ngay1 date;
ngay2 date;
ngay_sinh date;
ho_ten varchar2(30);
para varchar2(1000):=null;
dem integer := null;
ts integer:=0;
begin
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('');
htp.print('Danh s¸ch kÕt qu¶');
if tu_ngay is not null then para:=para|| ' tab.ns
>='''||to_date(tu_ngay,'DD/MM/YY')||''''; end if;
if den_ngay is not null then para:=para||'$'|| ' tab.ns
<='''||to_date(den_ngay,'DD/MM/YY')||''''; end if;
if ten is not null then para:= para||'$'||' tab.hoten='''|| ten||'''' ; end if;
dem:=length(para);
if (SUBSTR(para,1,1)='$') then para:=SUBSTR(para,2,dem-1); end if;
if (SUBSTR(para,dem,1)='$') then para:=SUBSTR(para,1,dem-1); end if;
para:= replace(para,'$',' AND ');
if para is not null then
para := 'delete Ngay_sinh tab where ' || para;
---------------------------------------------------------------------------------------------
Trang 91
Tiªu ThÞ Dù K39KTT
end if;
if para is null then
para:='delete ngay_sinh ';
end if;
cursor_name := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cursor_name, para, DBMS_SQL.V7);
ret := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
htp.print('');
htp.print('');
htp.print('');
end;
---------------------------------------
procedure test1 is
cursor c is select hoten, ns from ngay_sinh;
r c%rowtype;
begin
htp.print('');
htp.print('');
htp.print('');
for r in c
loop
htp.print('');
htp.print(r.hoten );
htp.print('');
htp.print(r.ns);
htp.print('');
end loop;
htp.print('');
htp.print('');
htp.print('');
end;
end demo1;
/
---------------------------------------------------------------------------------------------
Trang 92
Tiªu ThÞ Dù K39KTT
Các file đính kèm theo tài liệu này:
- Cơ sở dữ liệu bằng Web.pdf