Trong bài báo trước [9], chúng tôi đã
đề xuất một tiểu ngôn ngữ truy vấn có yếu tố
thời gian SubTSQL để truy vấn và thao tác dữ
liệu trên cơ sở dữ liệu thời gian. Bài báo này
chúng tôi sử dụng mã nguồn mở Lex và Yacc
để xây dựng một trình biên dịch, trình biên
dịch này làm công việc biên dịch câu truy
vấn thời gian thành câu SQL trong Oracle.
Một trình biên dịch như thế dễ dàng tạo lập
và giảm tải cho người lập trình
8 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1359 | Lượt tải: 0
Nội dung tài liệu Biên dịch câu truy vấn thời gian, thực thi trên hệ quản trị cơ sở dữ liệu, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Khoa hoïc - kó thuaäät
37
*
TOÙM TAÉT:
Trong baøi baùo tröôùc [9], chuùng toâi ñaõ
ñeà xuaát moät tieåu ngoân ngöõ truy vaán coù yeáu toá
thôøi gian SubTSQL ñeå truy vaán vaø thao taùc döõ
lieäu treân cô sôû döõ lieäu thôøi gian. Baøi baùo naøy
chuùng toâi söû duïng maõ nguoàn môû Lex vaø Yacc
ñeå xaây döïng moät trình bieân dòch, trình bieân
dòch naøy laøm coâng vieäc bieân dòch caâu truy
vaán thôøi gian thaønh caâu SQL trong Oracle.
Moät trình bieân dòch nhö theá deã daøng taïo laäp
vaø giaûm taûi cho ngöôøi laäp trình.
ABSTRACT:
In [9] we proposed the temporal
query sublanguage SubTSQL that can work
with temporal database. In this paper, we
present to use Open source code Lex and
Yacc that can support a complier so that the
complier is easily built and reducing the
working of programmer. This complier can
convert temporal queries to Oracle SQL
queries
1. GIÔÙI THIEÄU
Thöïc teá, nhieàu öùng duïng treân cô sôû
döõ lieäu (CSDL), maø caùc ñoái töôïng trong
CSDL ñoù caàn gaén theâm yeáu toá thôøi gian [3].
Ví duï: nhöõng öùng duïng nhö: ngaân haøng, lòch
chuyeán bay, quaûn lyù kho haøng, hoà sô beänh
vieän, thò tröôøng chöùng khoaùn v.v..., thì yeáu
toá thôøi gian gaén vôùi ñoái töôïng
* Khoa Công nghệ Thông tin, Trường Đại học Công nghiệp TP.
HCM
laø moät thöïc teá (ñoái töôïng thay ñoåi döõ lieäu
theo thôøi gian), caàn coù noù ñeå taêng möùc
phong phuù vaø ngöõ nghóa cuûa döõ lieäu trong
CSDL [4], [5], [9].
Hieän taïi, chöa coù moät heä quaûn trò cô
sôû döõ lieäu (HQTCSDL) naøo hoã trôï moät caùch
coù heä thoáng cho vieäc truy xuaát hay thao taùc
döõ lieäu treân CSDL höôùng thôøi gian. Ngay
caû Oracle 10g thì nhöõng caâu leänh coù hoã trôï
thôøi gian cuõng khaù phöùc taïp, ngöôøi duøng
caàn söû duïng nhieàu haøm thö vieän trong caâu
truy vaán, hôn nöõa ñeå coù moät phieân baûn
chính thöùc cuûa Oracle 10g toán chi phí raát
cao. Caâu truy vaán coù yeáu toá thôøi gian, neáu
ñöôïc vieát theo cuù phaùp cuûa moät HQTCSDL
thì phöùc taïp (xem caâu truy vaán trong muïc
4.1), ngay caû ñoái vôùi laäp trình vieân chuyeân
nghieäp. Ñeå ngöôøi duøng deã daøng vieát caâu
truy vaán thôøi gian, caàn xaây döïng moät trình
bieân dòch coù tính heä thoáng, cuõng nhö deã
daøng môû roäng noù ñeå bieân dòch cho nhieàu
daïng caâu truy vaán khaùc. Neáu vieát moät trình
bieân dòch nhö theá theo truyeàn thoáng, toán
keùm nhieàu chi phí. Do vaäy, söû duïng phaàn
meàm maõ nguoàn môû (PMMNM) laø moät
phöông phaùp khaû thi ñeå xaây döïng trình bieân
dòch. Hôn nöõa, Thuû töôùng chính phuû ñaõ pheâ
duyeät Döï aùn toång theå öùng duïng vaø phaùt
trieån PMMNM taïi Vieät Nam giai ñoaïn
2004-2008 (Quyeát ñònh soá 235/QÑ-TTg
ngaøy 02/02/2004), moät trong nhöõng
noäi dung quan troïng cuûa döï aùn laø ñaåy maïnh
BIEÂN DÒCH CAÂU TRUY VAÁN THÔØI GIAN,
THÖÏC THI TREÂN HEÄ QUAÛN TRÒ CÔ SÔÛ DÖÕ LIEÄU
Phaïm Vaên Chung*
Khoa hoïc - kó thuaäät
38
vieäc öùng duïng caùc PMMNM trong trieån
khai caùc öùng duïng coâng ngheä thoâng tin taïi
caùc ñôn vò, caùc toå chöùc nhaø nöôùc cuõng nhö
trong caùc doanh nghieäp [8].
Baøi baùo naøy söû duïng PMMNM Lex
vaø Yacc ñeå xaây döïng boä vaên phaïm cho tieåu
ngoân ngöõ SubTSQL, maø chuùng toâi ñaõ ñeå
xuaát tröôùc ñaây, noù coù cuù phaùp ñôn giaûn gaàn
nhö caâu truy vaán thoâng thöôøng (chi tieát
SubTSQL xem trong [9]), vaø bieân dòch caâu
truy vaán SubTSQL, thaønh caâu truy vaán theo
cuù phaùp cuûa Oracle, sau ñoù duøng thö vieän
OCI ñeå keát noái HQTCSDL Oracle qua laäp
trình treân C++. Roäng hôn, coù theå truy vaán
döõ lieäu theo thôøi gian treân baát kyø
HQTCSDL naøo, mieãn laø ngoân ngöõ duøng ñeå
laäp trình cho pheùp keát noái ñeán HQTCSDL
ñoù. Phaàn coøn laïi cuûa baøi baùo goàm coù : Phaàn
2, xaây döïng trình bieân dòch baèng Lex vaø
Yacc. Phaàn 3, keát noái CSDL qua thö vieän
OCI. Phaàn 4, Hieän thöïc bieân dòch caâu truy
vaán thôøi gian treân CSDL beänh vieän vaø cuoái
cuøng laø keát luaän trong phaàn 5.
2. XAÂY DÖÏNG TRÌNH BIEÂN
DÒCH DUØNG LEX VAØ YACC
Xaây döïng trình bieân dòch
Xaây döïng moät trình bieân dòch theo
truyeàn thoáng (thoâng thöôøng) thöôøng toán raát
nhieàu coâng söùc. Caùc böôùc cô baûn maø moät
trình bieân dòch thoâng thöôøng phaûi thöïc hieän:
- Ñoïc chuoãi nhaäp vaø taùch thaønh caùc
token.
- Döïa vaøo vaên phaïm vaø caùc token
tieán haønh xaây döïng caây phaân tích cuù phaùp .
- Döïa vaøo caây phaân tích cuù phaùp ñeå
sinh ra maõ.
Caùc böôùc xaây döïng trình bieân dòch
ñöôïc minh hoïa nhö hình 1. Trong hình naøy,
chuoãi nhaäp seõ ñöôïc chuyeån qua boä phaân
tích töø vöïng ñeå phaân tích thaønh caùc token,
sau ñoù caùc token seõ ñöôïc chuyeån sang boä
phaân tích cuù phaùp, taïi ñaây döïa vaøo vaên
phaïm vaø caùc token, noù tieán haønh xaây döïng
caây phaân tích cuù phaùp. Cuoái cuøng, döïa vaøo
caây phaân tích cuù phaùp, boä sinh maõ seõ sinh
id3
Chuỗi nhập a = b + c * d
Token id1 = id2 + id3 * id4
Bộ phân tích cú pháp
Cây cú pháp =
Bộ sinh mã
id1 +
*
id4
id2
Sinh mã load id3
mul id4
add id2
store id1
Hình 1. Các bước mà một trình biên dịch thông thường thực hiện
Bộ phân tích từ vựng
Khoa hoïc - kó thuaäät
39
maõ töông öùng. Baøi baùo söû duïng Lex vaø
Yacc laø hai PMMNM khaù thoâng duïng, qui
trình xaây döïng trình bieân dòch ñöôïc trình
baøy trong nhöõng phaàn sau .
Xaây döïng trình bieân dòch duøng
LEX vaø YACC
Lex taïo ra boä phaân tích töø vöïng vôùi
maõ C/C++ hoaëc Java. Lex duøng caùc maãu
(pattern) ñeå so khôùp vôùi chuoãi nhaäp vaø bieán
ñoåi chuoãi nhaäp thaønh caùc token töông öùng.
Moät token coù moät maõ rieâng bieät nhaèm ñôn
giaûn hoaù coâng vieäc xöû lyù. Khi Lex nhaän ra
caùc danh hieäu (id) trong doøng döõ lieäu vaøo,
noù nhaäp chuùng vaøo baûng danh bieåu. Baûng
danh bieåu chöùa caùc thoâng tin khaùc nhö kieåu
döõ lieäu (integer, real,…) vaø vò trí cuûa bieán
trong boä nhôù. Moät khi danh hieäu ñöôïc söû
duïng, caùc thoâng tin lieân quan ñeán noù ñöôïc
truy xuaát thoâng qua chæ muïc trong baûng
naøy.
Yacc taïo ra boä phaân tích cuù phaùp vôùi
maõ C/C++ hoaëc Java. Yacc duøng caùc luaät
vaên phaïm maø moãi luaät cho pheùp phaân tích
caùc token töø keát quaû cuûa Lex vaø taïo ra caây
phaân tích cuù phaùp. Moät caây phaân tích cuù
phaùp aùp ñaët caáu truùc coù thöù töï leân caùc
token. Vieäc taïo ra caây phaân tích cuù phaùp laø
moät böôùc quan troïng maø moät trình bieân dòch
phaûi thöïc hieän nhö trong hình 1.
Quy trình xaây döïng moät trình bieân
dòch söû duïng Lex vaø Yacc [1],[4] ñöôïc
trình baøy nhö hình 4. Giaû söû, caàn vieát moät
trình bieân dòch coù teân laø bas. Duøng trình
soïan thaûo (coù theå laø Parser Generator 2,
cheùp töï do treân Internet), tröôùc tieân, xaùc
ñònh taát caû caùc luaät, keát hôïp vôùi caùc maãu
vaø ñaët chuùng trong taäp tin bas.l. cho Lex.
Tieáp ñeán vieát caùc luaät vaên phaïm vaøo taäp
tin bas.y cho YACC.
Nhieäm vuï cuûa Yacc laø ñoïc caùc luaät
vaên phaïm vaø ñònh nghóa caùc token, ghi
chuùng vaøo taäp tin bas.y vaø sinh ra boä phaân
tích cuù phaùp ñaët vaøo taäp tin y.tab.c, caùc
token cuõng ñöôïc ñònh nghóa trong taäp tin
y.tab.h. Nhieäm vuï cuûa Lex laø ñoïc caùc moâ
taû maãu trong taäp tin bas.l vaø caùc ñònh nghóa
token trong taäp tin y.tab.h ñeå taïo ra boä
phaân tích töø vöïng ghi vaøo taäp tin Lex.yy.c.
Cuoái cuøng, boä phaân tích töø vöïng vaø boä phaân
tích cuù phaùp ñöôïc bieân dòch (duøng trình bieân
dòch C/C++ hoaëc Java), taïo ra taäp tin thöïc
thi bas.exe.
Moãi luaät vaên phaïm khai baùo trong
taäp tin bas.y ñeàu coù moät haønh ñoäng ngöõ
nghóa töông öùng. Haønh ñoäng ngöõ nghóa
ñoùng vai troø nhö moät nhö boä sinh maõ. Quaù
trình sinh maõ coù nhieàu möùc, coù theå sinh maõ
trung gian hoaëc sinh ra moät maõ khaùc, maõ
maùy laø caáp sinh maõ thaáp nhaát, trong baøi baùo
naøy seõ sinh ra maõ trung gian laø caâu truy vaán
theo cuù phaùp cuûa Oracle.
Xaây döïng boä phaân tích töø vöïng söû
duïng Lex coù caáu truùc goàm 3 khoái nhö hình 2:
%{
Caùc khai baùo C (C declaration)
%%
Caùc luaät Lex (Lex rules)
%%
Phaàn maõ C (Additional C code)
Hình 2: Caáu truùc caùc khoái cho Lex
Trong hình 2, khoái khai baùo C ñöôïc
baét ñaàu bôûi %{ vaø keát thuùc bôûi }%; khoái
luaät Lex baét ñaàu bôûi %% vaø keát thuùc bôûi
%%; khoái maõ C vieát cuoái cuøng.
Töông töï, xaây döïng boä phaân tích cuù
phaùp söû duïng Yacc goàm 4 khoái, caùc khoái
ñöôïc phaân caùch bôûi caùc kyù hieäu ñoùng môû
khoái nhö hình 3, chi tieát veà moãi khoái cho
moãi caáu truùc, xem trong [1],[4],[7].
%{
Caùc khai baùo C (C declarations)
%}
Caùc khai baùo Yacc (Yacc declarations)
Khoa hoïc - kó thuaäät
40
Chương trình nguồn
Trình biên dịch của Host language
Tập tin đối tượng
Liên kết với OCI
Ứng dụng
Thư viện OCI
Oracle Sever
%%
Phaàn vaên phaïm (Grammar rules)
%%
Phaàn maõ C (Additional C code)
Hình 3: Caáu truùc caùc khoái cho Yacc
3. KEÁT NOÁI CÔ SÔÛ DÖÕ LIEÄU
DUØNG THÖ VIEÄN OCI
Tieán trình phaùt trieån moät öùng duïng
OCI
Oracle laø moät heä quaûn trò cô sôû döõ
lieäu lôùn coù beà daày thôøi gian vaø coù uy tín.
Tuy nhieân ñeå söû duïng troïn goùi, ngöôøi duøng
phaûi maát chi phí khaù lôùn. Thay vì phaûi mua
troïn goùi, ngöôøi duøng chæ mua heä quaûn trò cô
sôû döõ lieäu, khi ñoù chi phí seõ giaûm ñaùng keå.
Vieäc xaây döïng caùc coâng cuï ñeå keát
noái cô sôû döõ lieäu treân Oracle baèng ngoân ngöõ
C (C ñöôïc coi nhö laø moät host language)
döïa vaøo caùc haøm OCI [6] coù saün trong
Oracle laø moät giaûi phaùp khaû thi, vì chính
Oracle cuõng söû duïng OCI ñeå xaây döïng moät
soá coâng cuï cho noù.
OCI coù thö vieän khaù phong phuù, cho
pheùp ngöôøi duøng phaùt trieån caùc öùng duïng
truy caäp döõ lieäu khoâng thuû tuïc cuûa SQL
baèng laäp trình thuû tuïc treân C/Java. OCI hoã
trôï taát caû caùc caâu leänh ñònh nghóa döõ lieäu,
thao taùc döõ lieäu, truy vaán, khaû naêng ñieàu
khieån chuyeån taùc maø coù saün trong Oracle.
Hình 5 minh hoïa tieán trình phaùt trieån moät
öùng duïng OCI.
Yacc
Lex
Trình biên
dịch
C/C++
y.tab.c
bas.exe
Lex.yy.c
bas
y.tab.h
bas.y
bas.l
Hình 4. Quy trình xây dựng trình biên dịch sử
dụng Lex và Yacc
Hình 5: Tiến trình phát triển một ứng dụng
OCI
Khoa hoïc - kó thuaäät
41
Trong hình 5, töø chöông trình nguoàn,
tieán haønh bieân dòch baèng moät host
language, ñeå taïo ra caùc taäp tin ñoái töôïng,
caùc taäp tin naøy tieáp tuïc ñöôïc lieân keát vôùi thö
vieän OCI ñeå taïo öùng duïng, vaø öùng duïng coù
khaû naêng truy xuaát ñeán CSDL Oracle
server.
Caùc böôùc laäp trình baèng OCI
Ñeå keát noái CSDL duøng thö vieän
OCI, caàn thöïc hieän caùc böôùc sau: khôûi taïo
caùc tieán trình, khôûi taïo moâi tröôøng laøm vieäc,
caáp phaùt caùc handle vaø caùc caáu truùc döõ lieäu
caàn thieát vaø keát noái vôùi CSDL Oracle
server. Baét ñaàu phieân laøm vieäc, caáp phaùt
caâu leänh SQL vaø truy xuaát döõ lieäu. Keát thuùc
phieân laøm vieäc, ngöôøi duøng ngaét keát noái vôùi
Oracle server, khi ñoù caáu truùc döõ lieäu vaø
caùc handle ñöôïc giaûi phoùng. Hoaït ñoäng cuûa
OCI ñöôïc minh hoïa trong hình 6. Trong
hình naøy, böôùc xöû lyù caâu leänh SQL vaø truy
xuaát döõ lieäu laø khaù quan troïng. Moät trong
haàu heát nhöõng nhieäm vuï phoå bieán cuûa moät
chöông trình OCI laø chaáp nhaän vaø xöû lyù caâu
leänh SQL, moät khi caùc handle caàn thieát ñaõ
ñöôïc caáp phaùt vaø ñaõ keát noái ñöôïc vôùi
Oracle server. Ñoàng thôøi vôùi moãi böôùc treân,
OCI cung caáp caùc haøm caàn thieát töông öùng
cho xöû lyù caâu leänh SQL, chi tieát coi trong
[6].
4. ÖÙNG DUÏNG
Chuùng toâi ñaõ caøi ñaët thöû nghieäm
nhöõng caâu truy vaán coù yeáu toá thôøi gian treân
moâi tröôøng Visual C++ vôùi döõ lieäu thöïc cuûa
beänh vieän Nhaân daân Gia Ñònh-TP.HCM, vaø
coù nhöõng keát quûa toát.
4.1 Cuù phaùp cuûa caâu truy vaán
SubTSQL
Ñeå thöïc hieän bieân dòch caâu truy vaán
baèng maõ nguoàn môû, phaàn naøy nhaéc laïi moät
soá yù cô baûn veà SubTSQL, chi tieát coù theå
xem trong [9]. Döõ lieäu thôøi gian ñöôïc caäp
nhaät trong nhöõng baûng döõ lieäu cuûa moâ hình
quan heä truyeàn thoáng, trong moãi baûng neáu
coù döõ lieäu thôøi gian thì theâm vaøo 2 coät
v_begin (thôøi gian baét ñaàu cuûa döõ lieäu ñöôïc
sinh ra), vaø v_end (thôøi gian keát thuùc). Noùi
moät caùch khaùc döõ lieäu (hay söï kieän) ñöôïc
ghi trong baûng coù giaù trò ñuùng trong khoaûng
thôøi gian töø v_begin ñeán v_end (xem baûng
patient döôùi ñaây.
Caâu truy vaán thôøi gian SubTSQL
töông töï nhö nhöõng caâu SQL thoâng thöôøng,
chæ theâm moät meänh ñeà WHEN ñeå thao taùc
yeáu toá thôøi gian, yeáu toá thôøi gian laø vò trí
töông ñoái giöõa hai khoaûng thôøi gian v_begin
vaø v_end vaø noù tuaân theo nhöõng taân töø trong
[2], cuï theå laø nhöõng taân töø: BEFORE,
AFTER, DURING, CONTAINS, OVERLAPS,
Khởi tạo tiến trình
Khởi tạo môi trường
Định vị các handle
Kết nối với server
Gửi câu SQL và xử lý
Ngắt kết nối
Giải phóng các handle và cấu trúc dữ liệu
Hình 6: Những bước hoạt động của OCI
Khoa hoïc - kó thuaäät
42
MEETS, STARTS, FINISHES, vaø EQUALS.
Vaø sau ñaây laø moät soá ví duï cuï theå veà caâu truy
vaán thôøi gian.
- Caâu truy vaán SELECT, meänh ñeà
WHEN duøng taân töø ‚DURING‛
SELECT manv, Hoten, V_begin,
V_end FROM NhanVien
WHEN NhanVien DURING
(25/3/2000 , 25/5/2000)
WHERE mapb = 'D8' ;
- Caâu truy vaán UPDATE, meänh ñeà
WHEN chæ ra thôøi gian caàn caäp nhaät
UPDATE drugs set drug= 'dfdsf' WHEN
(25/02/03,05/03/03,'dd/mm/yy')
where p_id>0
- Caâu truy vaán DELETE, meänh ñeà
WHEN chæ ra döõ lieäu caàn xoùa trong moät
khoûang thôøi gian.
DELETE from drugs
WHEN(5/02/03,05/03/03,'dd/mm/yy') where
p_id>0
Ví duï: Cho baûng döõ lieäu Patient vaø
caâu truy vaán thôøi gian nhö sau
Patient
P_ ID problem department v_begin v_end
J001 P1 D10 14/02/2000 01/03/2000
J001 P2 C2 10/03/2000 31/12/9999
P005 P3 D8 01/04/2000 12/05/2000
R006 P3 D8 13/02/2000 01/06/2000
SELECT p_id, problem, v_begin,
v_end
FROM patient
WHEN patient DURING
(25/3/2000 , 25/5/2000)
WHERE department = 'D8' ;
Caâu truy vaán treân caàn bieân dòch
thaønh caâu Oracle-SQL
SELECT p_id, problem, v_begin,
v_end
FROM patient
WHERE department ='D8' AND
((patient.v_begin)>
to_date(‘25/3/2000’,’’dd/mm/yyyy’)
AND( (patient.v_end) <=
to_date(‘25/5/2000’,’dd/mm/yyyy’))
OR (( patient.v_begin) >=
to_date(‘25/3/2000’,’dd/mm/yyyy’))
AND (patient.v_end)<
to_date(‘25/5/2000’,’dd/mm/yyyy’));
Trong ví duï naøy, phaàn chöõ in
nghieâng, ñaäm trong meänh ñeà WHERE cuûa
caâu Oracle-SQL chính laø noäi dung cuûa
meänh ñeà WHEN ñöôïc vieát theo nhöõng taân
töø so saùnh khoaûng thôøi gian nhö trong [2].
Ví duï naøy cho thaáy: moät caâu truy vaán thôøi
gian ñöôïc vieát baèng caâu truy vaán thoâng
thöôøng thì khaù phöùc taïp, raát deã maéc loãi,
ngay caû nhöõng laäp trình vieân chuyeân
nghieäp. Do vaäy, vieäc bieân dòch caâu
SubTSQL baèng maõ nguoàn môû coù yù nghóa
thieát thöïc, cuõng nhö caâu SubTSQL vôùi cuù
phaùp ñôn giaûn, deã thaân thieän vôùi ngöôøi
duøng (Nhöõng caâu truy vaán thôøi gian Update
vaø Delete cuõng ñöôïc bieân dòch moät caùch
töông töï nhö caâu truy vaán Select).
4.2 Kieán truùc trong caøi ñaët
Ñeå thöïc hieän caøi ñaët, chuùng toâi kieán
truùc moät moâ-ñun nhö hình 7, ñaët trong
khung hình chöõ nhaät ñöôïc vieàn ñaäm baèng
ñöôøng keùp, vaø noù ñöôïc ñaët treân ñænh cuûa
HQTCSDL Oracle. Hôn nöõa moâ-ñun naøy,
noù ñoäc laäp vôùi moïi HQTCSDL, neáu ñöôïc
chænh laïi moät chuùt trong Yacc ñeå coù maõ sinh
ra ñuùng vôùi cuù phaùp cuûa HQTCSDL caàn
duøng.
Khoa hoïc - kó thuaäät
43
Trong hình 7, tieán trình thöïc hieän
caâu truy vaán bao goàm : Ngöôøi duøng nhaäp
moät caâu leänh Q, sau ñoù Lex phaân tích Q
thaønh caùc token. Yacc phaân tích cuù phaùp
cuûa Q döïa treân cuù phaùp cuûa SubTSQL. Baát
kì loãi naøo ñöôïc tìm thaáy trong quaù trình
phaân tích seõ thoâng baùo. Neáu khoâng coù loãi
thì Q ñöôïc göûi ñeán Boä sinh maõ, noù bieân
dòch Q thaønh caâu leänh SQL cuûa Oracle, sau
ñoù göûi ñeán heä quaûn trò CSDL Oracle thoâng
qua moâ-ñun OCI, taïi ñaây noù nhaän caâu leänh
SQL- Oracle vaø thöïc hieän treân Oracle ñeå
laáy keát quaû traû veà. Cuoái cuøng Boä xöû lyù xuaát
keát quaû cho ngöôøi duøng.
4.3 Giao dieän thöïc hieän caâu truy vaán
Hình 8 chæ ra maøn hình giao dieän vôùi
ngöôøi duøng ñeå thöïc hieän vaán tin treân CSDL
höôùng thôøi gian, ñöôïc caøi ñaët trong Visual
C++, ngöôøi duøng coù theå soaïn caâu truy vaán
trong khung SubTSQL input, sau ñoù cho keát
noái Oracle baèng nuùt Connect vaø thöïc thi
baèng nuùt Execute, Keát quaû ñöôïc hieän thò
trong Results. Neáu quaù trình bieân dòch hay
thöïc thi treân Oracle coù loãi, thoâng baùo loãi ñöôïc
hieån thò trong SQL output/Error output.
5. KEÁT LUAÄN
Xaây döïng öùng duïng baèng söû duïng
maõ nguoàn môû ñaõ giaûm ñöôïc nhieàu chi phí,
hôn nöõa maõ nguoàn môû cho pheùp coù theå aùp
duïng xaây döïng nhöõng öùng duïng khaùc nhau
trong nhieàu laõnh vöïc. Trong baøi baùo naøy, söû
duïng LEX vaø YACC bieân dòch nhöõng caâu
leänh ñeå thöïc hieän nhöõng öùng duïng trong moâ
hình CSDL höôùng thôøi gian. Vaø coøn coù
nhieàu maõ nguoàn môû khaùc cho pheùp ngöôøi
duøng söû duïng theo yeâu caàu rieâng cuûa moãi
ngöôøi maø khoâng vi phaïm baûn quyeàn, vaø ñi
vaøo khaù nhieàu laõnh vöïc öùng duïng thieát thöïc
nhö: keá toaùn, phaùt trieån Web, chính phuû
ñieän töû, coâng ngheä sinh hoïc, quaûn trò doanh
nghieäp . . . coù theå xem chi tieát trong taäp san
[8]. Trong chieàu höôùng Vieät Nam gia nhaäp
WTO, thì vieäc phaùt trieån veà CNTT duøng maõ
nguoàn môû laø moät loái ñi deã daøng coù nhieàu
höùa heïn. Coâng vieäc tieáp theo cuûa chuùng toâi
tieáp tuïc trieån khai öùng duïng maõ nguoàn môû
ñeå xaây döïng theâm nhöõng caâu truy vaán cho
vieäc trích yeáu thôøi gian trong moâ hình
CSDL höôùng thôøi gian.
Hình 7: Kieán truùc thöïc hieän caâu truy vaán
Oracle
Bộ sinh mã
Bộ xử lý
xuất kết
qủa
Câu truy vấn SubTSQL
Mô-đun OCI
Lex
Yacc
Kết qủa Báo lỗi
Khoa hoïc - kó thuaäät
44
TAØI LIEÄU THAM KHAÛO
[1] Anthony A. Aaby, ‘Compiler
construction using FLex and Bison’, Walla
Walla College, April, 2005.
[2] J.F. Allen, ‘Maintaining
Knowledge about Temporal Intervals’,
Communication of the ACM, 26(11),
November, 1993, 832-843.
[3] C.J. Date, Hugh Darwen,
N.A.Lorentzos, ‘Temporal Data and the
Relation Model’, Morgan Kaufmann
Publishers, 2003.
[4] Bert Hubert, ‘LEX and YACC
primer/How to’, PowerDNS BV, April,
2002.
[5] N. A. Lorentzos, ‘The Interval-
extended Relational Model and its
Application to Valid-time Databases’,
Temporal Databases – Theory, Design and
Implementation, Benjamin/ Cummings
Publishing, 1993, 65-91.
[6] Phil Locke, ‘Oracle Call
Interface Programmer’s Guide’, Oracle
Corporation, 1997.
[7] Thomas Niemann, ‘A compact
guide to LEX & YACC ’,
www.epaperpress.com.
[8] Taäp san ‘Hoäi thaûo khoa hoïc öùng
duïng phaàn meàm maõ nguoàn môû’, Vaên phoøng
CNTT- Boä KH&CN, Sôû KH&CN- TP.HCM
13-09-2005.
[9] Phaïm vaên Chung. Döông Tuaán
Anh, ‚Implementing a Query Sublanguage
for Temporal Clincal database Systems‛,
Proceedings of the MMU International
Symposum on information &
Communications Technologies 2005, 24–
25 November 2005, Malaysia, pp. TS12-
13-16.
Hình 8: Giao dieän thöïc hieän hieän caâu truy vaán coù
yeáu toá thôøi gian
Các file đính kèm theo tài liệu này:
- 3744R.pdf