SQL TRONG MễI TRƯỜNG LP TRèN HẬ

Một phần của tài liệu Tài liệu Giáo trình Ngôn ngữ SQL docx (Trang 98)

L IM ĐU ỞẦ

3.1 SQL TRONG MễI TRƯỜNG LP TRèN HẬ

T i th i đi m này, chỳng ta đó s d ng giao di n SQL chung trong cỏcớ ờ ể ử ụ ệ vớ d . Đú là, chỳng ta đó gi s r ng cú m t b thụng d ch SQL, nú ch pụ ả ử ằ ộ ộ ị ấ nh n và th c hi n cỏc lo i truy v n và cỏc cõu l nh chỳng ta đó h c. M cậ ự ệ ạ ấ ệ ọ ặ dự được h u h t cỏc h qu n tr c s d li u cung c p nh m t tựyầ ế ệ ả ị ơ ở ữ ệ ấ ư ộ ch n, ki u thao tỏc này hi m khi đọ ể ế ược s d ng. Trong th c t , h u h tử ụ ự ế ầ ế cỏc cõu l nh SQL là m t ph n c a m t m u ph n m m l n. M t khungệ ộ ầ ủ ộ ẩ ầ ề ớ ộ c nh th c ti n h n là cú m t chả ự ễ ơ ộ ương trỡnh được vi t trong m t ngụn ngế ộ ữ ch thụng thủ ường nào đú ch ng h n nh C, nh ng m t s bẳ ạ ư ư ộ ố ước trong chương trỡnh này là nh ng cõu l nh SQL. Trong ph n này chỳng ta s mụữ ệ ầ ẽ t m t cỏch đ làm cho SQL thao tỏc trong m t chả ộ ể ộ ương trỡnh thụng thường.

Hỡnh 3.1 là m t phỏc h a c a m t h th ng l p trỡnh đi n hỡnh cú ch a nh ngộ ọ ủ ộ ệ ố ậ ể ứ ữ

cõu l nh SQL. đú, chỳng ta nhỡn th y ngệ Ở ấ ườ ậi l p trỡnh đang vi t cỏc chế ương trỡnh trong m t ngụn ng ch nh ng v i m t vài cõu l nh SQL “nhỳng” đ c bi tộ ữ ủ ư ớ ộ ệ ặ ệ

khụng là m t ph n c a ngụn ng ch . Toàn b chộ ầ ủ ữ ủ ộ ương trỡnh được g i t i m tử ớ ộ

b ti n x lý, nú bi n đ i nh ng cõu l nh SQL nhỳng thành nh ng th cú ý nghĩaộ ề ử ể ổ ữ ệ ữ ứ

trong ngụn ng ch . S bi u di n c a SQL cú th đ n gi n nh là m t l i g iữ ủ ự ể ễ ủ ể ơ ả ư ộ ờ ọ

t i m t hàm, hàm này nh n cõu l nh SQL nh m t tham s xõu ký t và th cớ ộ ậ ệ ư ộ ố ự ự

hi n cõu l nh SQL đú.ệ ệ

Chương trỡnh ngụn ng ch đữ ủ ược ti n x lý sau đú đề ử ược biờn d ch theo cỏchị

thụng thường. Nh ng nhà cung c p h qu n tr c s d li u thữ ấ ệ ả ị ơ ở ữ ệ ường chu n bẩ ị

đ y đ m t th vi n cung c p nh ng đ nh nghĩa hàm c n thi t. Do v y, nh ngầ ủ ộ ư ệ ấ ữ ị ầ ế ậ ữ

hàm th hi n SQL cú th để ệ ể ược x lý, và toàn b chử ộ ương trỡnh ng x nh m tứ ử ư ộ

đ n v . Chỳng ta cũng đ a vào trong Hỡnh 3.1 kh năng ngơ ị ư ả ườ ậi l p trỡnh vi t móế

l nh tr c ti p trong ngụn ng ch , s d ng nh ng l i g i hàm đú khi c n. Cỏchệ ự ế ữ ủ ử ụ ữ ờ ọ ầ

ti p c n này, thế ậ ường được tham kh o đ n nh ả ế ư m t giao di n m c g iộ (call-level interface – CLI), s đẽ ược th o lu n trong ph n 3.4.ả ậ ầ

3.1.1 V n đ tr ng i khụng phự h p ấ ề ở

V n đ c b n c a vi c k t n i nh ng cõu l nh SQL v i nh ng cõuấ ề ơ ả ủ ệ ế ố ữ ệ ớ ữ l nh c a m t ngụn ng l p trỡnh thụng thệ ủ ộ ữ ậ ường là tr ng i khụng phự h p,ở ạ ợ trờn th c t là mụ hỡnh d li u c a SQL khỏc cỏc mụ hỡnh c a nh ng ngụnự ế ữ ệ ủ ủ ữ ng khỏc r t nhi u. Nh chỳng ta bi t, SQL s d ng mụ hỡnh d li uữ ấ ề ư ế ử ụ ữ ệ quan h lừi c a nú. Tuy nhiờn, C và nh ng ngụn ng l p trỡnh ph bi nệ ở ủ ữ ữ ậ ổ ế khỏc s d ng m t mụ hỡnh d li u v i nh ng s nguyờn, s th c, cỏc s ,ử ụ ộ ữ ệ ớ ữ ố ố ự ố cỏc ký t , con tr , c u trỳc b n ghi, m ng v..v. T p h p khụng cú m tự ỏ ấ ả ả ậ ợ ặ tr c ti p trong C ho c nh ng ngụn ng khỏc đú, trong khi SQL khụng sự ế ặ ữ ữ ử d ng bi n tr , vũng l p và r nhỏnh, ho c nhi u c u trỳc ngụn ng l pụ ế ỏ ặ ẽ ặ ề ấ ữ ậ trỡnh ph bi n khỏc. K t qu là vi c trao đ i d li u truy n d li u gi aổ ế ế ả ệ ổ ữ ệ ề ữ ệ ữ SQL và nh ng ngụn ng khỏc là khụng đ n gi n, và ph i đ a ra m t kữ ữ ơ ả ả ư ộ ỹ thu t cho phộp xõy d ng nh ng chậ ự ữ ương trỡnh s d ng c SQL và ngụnử ụ ả ng khỏc.ữ

Đ u tiờn ngầ ười ta cú th gi thi t r ng t t h n h t là s d ng m tể ả ế ằ ố ơ ế ử ụ ộ ngụn ng đ n; ho c làm t t c nh ng tớnh toỏn trong SQL ho c quờn SQLữ ơ ặ ấ ả ữ ặ đi và làm t t c nh ng tớnh toỏn trong m t ngụn ng thụng thấ ả ữ ộ ữ ường. Tuy

nhiờn, chỳng ta cú th nhanh chúng b qua ý tể ỏ ưởng b qua SQL khi cúỏ nh ng phộp toỏn c s d li u đữ ơ ở ữ ệ ược đ a vào. Cỏc h th ng SQL h trư ệ ố ỗ ợ r t nhi u cho ngấ ề ườ ậi l p trỡnh trong vi c vi t nh ng phộp toỏn c s dệ ế ữ ơ ở ữ li u cú th đệ ể ược th c hi n m t cỏch hi u qu tuy r ng chỳng cú thự ệ ộ ệ ả ằ ể được bi u bi n m c r t cao. SQL gi i phúng ngể ễ ở ứ ấ ả ườ ậi l p trỡnh kh i sỏ ự c n thi t đ hi u d li u đầ ế ể ể ữ ệ ượ ổc t ch c nh th nào trong b nh ho cứ ư ế ộ ớ ặ khai thỏc c u trỳc l u tr đú nh th nào đ thao tỏc m t cỏch cú hi u quấ ư ữ ư ế ể ộ ệ ả trờn c s d li u.ơ ở ữ ệ

M c khỏc, cú nhi u vi c quan tr ng mà SQL khụng th làm n i. Vớ d ,ặ ề ệ ọ ể ổ ụ người ta khụng th vi t m t truy v n SQL đ tớnh toỏn giai th a c a m tể ế ộ ấ ể ừ ủ ộ s n [n!=n*(n-1)*…*2*1], dự đú là m t bài t p đ n gi n trong C ho cố ộ ậ ơ ả ặ trong nh ng ngụn ng tữ ữ ương t . M t vớ d khỏc, SQL khụng th đ nhự ộ ụ ể ị d ng đ u ra c a nú m t cỏch tr c ti p thành m t d ng thớch h p nh làạ ầ ủ ộ ự ế ộ ạ ợ ư m t đ h a. Do v y, l p trỡnh c s d li u th c s đũi h i c SQL vàộ ồ ọ ậ ậ ơ ở ữ ệ ự ự ỏ ả m t ngụn ng thụng thộ ữ ường; ngụn ng này thữ ường được tham chi u đ nế ế nh là ngụn ng ch (host language).ư ữ ủ

3.1.2 Giao di n ngụn ng ch /SQLệ

Vi c truy n thụng tin gi a c s d li u (ch cú th đệ ề ữ ơ ở ữ ệ ỉ ể ược truy c p b iậ ở nh ng cõu l nh SQL) và chữ ệ ương trỡnh ngụn ng ch thụng qua nh ngữ ủ ữ bi n c a ngụn ng ch , g i là cỏc bi n dựng chung. Nh ng bi n này cúế ủ ữ ủ ọ ế ữ ế th để ược cỏc cõu l nh SQL đ c ho c ghi. T t c nh ng ệ ọ ặ ấ ả ữ bi n dựng chungế

(shared variable) nh v y cú m t d u hai ch m đi trư ậ ộ ấ ấ ước khi chỳng được tham chi u đ n trong m t cõu l nh SQL, nh ng chỳng xu t hi n khụng cúế ế ộ ệ ư ấ ệ d u hai ch m trong nh ng cõu l nh ngụn ng ch .ấ ấ ữ ệ ữ ủ

Khi chỳng ta mu n s d ng m t cõu l nh SQL trong m t chố ử ụ ộ ệ ộ ương trỡnh ngụn ng ch , chỳng ta ph i đ t cỏc t khúa EXEC SQL trữ ủ ả ặ ừ ở ước nú. M tộ h th ng đi n hỡnh s ti n x lý nh ng cõu l nh đú và thay th chỳng b iệ ố ể ẽ ề ử ữ ệ ế ở nh ng l i g i hàm phự h p trong ngụn ng ch , t o ra vi c s d ng m tữ ờ ọ ợ ữ ủ ạ ệ ử ụ ộ th vi n cỏc hàm SQL cú liờn quan.ư ệ

Ngôn ngữchủ + SQL nhúng Bo tien xu ly Ngôn ngữchủ + Lời gọi hàm Bộ biên dịch ngôn ngữ chủ Chương trỡnh đớch Th ưviện SQL

Hình 3.1: Việc xử lý cá c ch- ơng trình vớ i cá c câu lệnh SQL nhúng

M t bi n đ c bi t, độ ế ặ ệ ược g i là SQLSTATE trong SQL chu n, ph c vọ ẩ ụ ụ k t n i chế ố ương trỡnh ngụn ng ch v i h th ng th c hi n SQL. Ki uữ ủ ớ ệ ố ự ệ ể SQLSTATE là m t m ng năm ký t . M i khi m t hàm c a th vi n SQLộ ả ự ỗ ộ ủ ư ệ được g i, m t mó đọ ộ ược đ t vào trong bi n SQLSTATE ch ra nh ng v nặ ế ỉ ữ ấ đ b t kỳ đề ấ ược tỡm th y trong su t quỏ trỡnh g i đú. SQL chu n đ nh rừấ ố ọ ẩ ị m t lộ ượng l n nh ng mó năm ký t và ý nghĩa c a chỳng. ớ ữ ự ủ Vớ d , ‘00000’ụ (năm s khụng) ch ra r ng tỡnh tr ng khụng l i x y ra, và ‘02000’ ch raố ỉ ằ ạ ỗ ả ỉ r ng khụng tỡm th y b giỏ tr đằ ấ ộ ị ược yờu c u. Chỳng ta s th y r ng móầ ẽ ấ ằ ‘02000’ r t quan tr ng, vỡ nú cho phộp chỳng ta t o m t vũng l p trongấ ọ ạ ộ ặ chương trỡnh ngụn ng ch ki m tra l n lữ ủ ể ầ ượt cỏc b c a m t quan h vàộ ủ ộ ệ phỏ b vũng l p sau khi b cu i cựng đó đỏ ặ ộ ố ược ki m tra. Chể ương trỡnh ngụn ng ch cú th đ c đữ ủ ể ọ ược giỏ tr c a SQLSTATE và đ a m t quy tị ủ ư ộ ế đ nh d a trờn c s giỏ tr tỡm đị ự ơ ở ị ược đú.

3.1.3 Ph n khai bỏo (DECLARE)ầ

Đ khai bỏo nh ng bi n dựng chung, chỳng ta đ t nh ng khai bỏo c aể ữ ế ặ ữ ủ chỳng gi a hai cõu l nh SQL nhỳng:ữ ệ

………

EXEC SQL END DECLARE SECTION;

Nh ng gỡ xu t hi n gi a chỳngữ ấ ệ ữ được g i là ph n khai bỏo. D ng c aọ ầ ạ ủ nh ng khai bỏo bi n trong ph n khai bỏo là t t c m i th mà ngụn ngữ ế ầ ấ ả ọ ứ ữ ch yờu c u. H n n a, nú ch cú nghĩa đ i v i khai bỏo cỏc bi n cú ki uủ ầ ơ ữ ỉ ố ớ ế ể mà c ngụn ng ch và SQL cú th giao ti p, ch ng h n nh s nguyờn,ả ữ ủ ể ế ẳ ạ ư ố s th c, và xõu ký t ho c m ng.ố ự ự ặ ả

Vớ d 3.1ụ : Nh ng cõu l nh sau đõy cú th xu t hi n trong m t hàm Cữ ệ ể ấ ệ ộ c p nh t quan h Đ NV :ậ ậ ệ Ơ Ị

EXEC SQL BEGIN DECLARE SECTION; INT Mós INT, CHAR Tờn[15];ố char SQLSTATE[6];

EXEC SQL END DECLARE SECTION;

Cỏc dũng l nh đ u và cu i là quy đ nh đ b t đ u và k t thỳc ph nệ ầ ố ị ể ắ ầ ế ầ khai bỏo. gi a là m t dũng l nh khai bỏo hai bi n Mós và Tờn. ChỳngỞ ữ ộ ệ ế ố là m t s nguyờn và m t m ng ký t và, nh chỳng ta s th y, chỳng cúộ ố ộ ả ự ư ẽ ấ th để ượ ử ục s d ng đ l u gi m t mó s và tờn c a m t đ n v để ư ữ ộ ố ủ ộ ơ ị ược đ aư vào trong m t b và độ ộ ược chốn vào trong quan h Đ NV . Dũng l nh thệ Ơ Ị ệ ứ ba khai bỏo SQLSTATE là m t m ng sỏu ký t .ộ ả ự

3.1.4 S d ng cỏc bi n dựng chung.ử ụ ế

M t bi n dựng chung cú th độ ế ể ược s d ng trong cỏc cõu l nh SQL ử ụ ệ ở nh ng v trớ chỳng ta mu n ho c đữ ị ố ặ ược phộp đ t m t h ng. Nh c l i r ngặ ộ ằ ắ ạ ằ nh ng bi n dựng chung cú m t d u hai ch m đ t trữ ế ộ ấ ấ ặ ước nú khi s d ng.ử ụ Đõy là m t vớ d trong đú chỳng ta s d ng cỏc bi n c a Vớ d 3.1 nh làộ ụ ử ụ ế ủ ụ ư nh ng thành ph n c a m t b đữ ầ ủ ộ ộ ược chốn vào trong quan h Đ NV .ệ Ơ Ị

Vớ d 3.2ụ : Trong Hỡnh 3.2 là m t minh h a c a m t hàm C getDonviộ ọ ủ ộ nh c ngắ ười dựng cho mós và tờn c a m t đ n v , đ c tr l i và chốn bố ủ ộ ơ ị ọ ả ờ ộ thớch h p vào Đ NV . Dũng (1) đ n dũng (4) là nh ng khai bỏo chỳng taợ Ơ Ị ế ữ đó được h c trong Vớ d 3.1. Chỳng ta b qua cỏc l nh c a C yờu c u đ aọ ụ ỏ ệ ủ ầ ư cỏc giỏ tr vào hai bi n Mós và Tờn. Sau đú, trong cỏc dũng (5) và (6) làị ế ố

m t cõu l nh SQL nhỳng, đú là m t cõu l nh INSERT thụng thộ ệ ộ ệ ường. L nhệ này cú t khúa EXEC SQL đi trừ ước đ ch ra r ng nú qu th c là m t cõuể ỉ ằ ả ự ộ l nh SQL nhỳng ch khụng ph i là m t cõu l nh C sai ng phỏp. B ti nệ ứ ả ộ ệ ữ ộ ề x lý đử ược đ ngh trong Hỡnh 3.1 s tỡm ki m EXEC SQL đ phỏt hi nề ị ẽ ế ể ệ nh ng cõu l nh ph i đữ ệ ả ược ti n x lý.ề ử

Nh ng giỏ tr đữ ị ược cỏc dũng (5) và (6) chốn vào khụng ph i là cỏc h ngả ằ rừ ràng. Nh ng giỏ tr xu t hi n trong dũng (6) là nh ng bi n dựng chungữ ị ấ ệ ữ ế mà giỏ tr hi n th i c a chỳng tr thành nh ng thành ph n c a b đị ệ ờ ủ ở ữ ầ ủ ộ ược chốn.

Cựng v i cõu l nh INSERT cũn cú nhi u ki u cõu l nh SQL khỏc cúớ ệ ề ể ệ th để ược nhỳng vào trong m t ngụn ng ch , chỳng s d ng nh ng bi nộ ữ ủ ử ụ ữ ế dựng chung nh m t giao di n. M i cõu l nh nhỳng SQL cú cỏc t khúaư ộ ệ ỗ ệ ừ EXEC SQL đi trước trong chương trỡnh ngụn ng ch và cú th thamữ ủ ể chi u đ n cỏc bi n dựng chung trong v trớ c a cỏc h ng. Cõu l nh SQLế ế ế ị ủ ằ ệ b t kỳ khụng tr v m t k t qu (t c là, khụng ph i là m t truy v n) cúấ ả ề ộ ế ả ứ ả ộ ấ th để ược nhỳng. Nh ng vớ d v nh ng cõu l nh SQL cú th nhỳng đữ ụ ề ữ ệ ể ược bao g m nh ng cõu l nh xúa và c p nh t và nh ng cõu l nh đ t o, s a,ồ ữ ệ ậ ậ ữ ệ ể ạ ử ho c xúa nh ng thành ph n lặ ữ ầ ược đ ch ng h n nh cỏc b ng và cỏcồ ẳ ạ ư ả khung nhỡn.

Void getDONVI() {

1) EXEC SQL BEGIN DECLARE SECTION; 2) INT Mós INT, CHAR Tờn[15];ố 3) char SQLSTATE[6];

4) EXEC SQL END DECLARE SECTION;

/* Cỏc cõu l nh C yờu c u nh p d li u cho Mós và Tờn */ệ ầ ậ ữ ệ ố 5) EXEC SQL INSERT INTO Đ NV (Mós ĐV, TờnĐV)Ơ Ị ố 6) VALUES(:Mó s ,:Tờn) }ố

Hỡnh 3.2: Minh h a vớ d 3.2ọ ụ

h p”. Cỏc truy v n đ a ra k t qu là nh ng t p h p cỏc b , trong khiợ ấ ư ế ả ữ ậ ợ ộ khụng cú m t ngụn ng ch nào h tr ki u d li u t p h p m t cỏchộ ữ ủ ỗ ợ ể ữ ệ ậ ợ ộ tr c ti p. Do v y, SQL nhỳng ph i s d ng m t trong hai k thu t đ k tự ế ậ ả ử ụ ộ ỹ ậ ể ế n i k t qu c a cỏc truy v n v i m t chố ế ả ủ ấ ớ ộ ương trỡnh ngụn ng ch .ữ ủ

1. M t truy v n đ a ra m t b đ n cú th cú b đú độ ấ ư ộ ộ ơ ể ộ ượ ưc l u tr trongữ cỏc bi n dựng chung, m t bi n cho m i thành ph n c a b . Đ làm nhế ộ ế ỗ ầ ủ ộ ể ư v y, chỳng ta s d ng m t d ng s a đ i c a cõu l nh select-from-whereậ ử ụ ộ ạ ử ổ ủ ệ được g i là m t select đ n-hàng (single-row select).ọ ộ ơ

2. Cỏc truy v n t o ra nhi u h n m t b cú th đấ ạ ề ơ ộ ộ ể ược th c hi n n uự ệ ế chỳng ta khai bỏo m t con tr cho truy v n.Con tr duy t qua t t c cỏcộ ỏ ấ ỏ ệ ấ ả b trong quan h tr l i, và m i b cú th l n lộ ệ ả ờ ỗ ộ ể ầ ượ ượt đ c đ t vào trongặ nh ng bi n dựng chung và đữ ế ược x lý b i chử ở ương trỡnh ngụn ng ch .ữ ủ

Chỳng ta s xem xột l n lẽ ầ ượ ừt t ng k thu t m t.ỹ ậ ộ

3.1.5 Cỏc cõu l nh Select đ n hàngệ ơ

Khuụn m u c a m t select đ n hàng cũng gi ng nh m t cõu l nhẫ ủ ộ ơ ố ư ộ ệ select-from-where bỡnh thường, ngo i tr r ng theo sau m nh đ SELECTạ ừ ằ ệ ề là t khúa INTO và m t danh sỏch cỏc bi n dựng chung. Nh ng bi n dựngừ ộ ế ữ ế chung cú cỏc d u hai ch m đi trấ ấ ước, nh là trư ường h p cho t t c nh ngợ ấ ả ữ bi n dựng chung trong m t cõu l nh SQL. N u k t qu c a truy v n làế ộ ệ ế ế ả ủ ấ m t b đ n, cỏc thành ph n c a b này s tr thành cỏc giỏ tr c a nh ngộ ộ ơ ầ ủ ộ ẽ ở ị ủ ữ bi n dựng chung. N u k t qu ho c là khụng cú b ho c cú nhi u h nế ế ế ả ặ ộ ặ ề ơ m t b , thỡ s khụng cú phộp gỏn nào cho cỏc bi n dựng chung độ ộ ẽ ế ược th cự hi n, và m t mó l i thớch h p đệ ộ ỗ ợ ược ghi vào bi n SQLSTATE.ế

Vớ d 3.3:ụ Chỳng ta s vi t m t hàm C đ đ c tờn c a m t đ n v và inẽ ế ộ ể ọ ủ ộ ơ ị ra lương c a ngủ ười qu n lý đ n v . M t phỏc h a c a hàm này đả ơ ị ộ ọ ủ ược thể hi n trong Hỡnh 3.3. Nú b t đ u v i m t ph n khai bỏo, dũng (1) đ n dũngệ ắ ầ ớ ộ ầ ế (5), cho nh ng bi n chỳng ta s c n đ n. Ti p theo là cỏc cõu l nh C yờuữ ế ẽ ầ ế ế ệ c u nh p vào Tờnđ nv (cỏc l nh này khụng đầ ậ ơ ị ệ ược vi t rừ).ế

Dũng (6) đ n (9) là cõu l nh select đ n hàng. Nú hoàn toàn tế ệ ơ ương t cỏcự truy v n chỳng ta đó đấ ược bi t. Hai đi u khỏc bi t đú là giỏ tr c a bi nế ề ệ ị ủ ế

Tờnđ nv đơ ị ượ ử ục s d ng thay cho m t h ng xõu trong đi u ki n c a dũngộ ằ ề ệ ủ

Một phần của tài liệu Tài liệu Giáo trình Ngôn ngữ SQL docx (Trang 98)

Tải bản đầy đủ (PDF)

(180 trang)