Chuẩn bị cho Kỳ thi về Phát triển ứng dụng DB2 9, Phần 1: Các đối tượng cơ sở dữ liệu và các phương pháp lập trình Xây dựng nền tảng với những kiến thức cơ sở Clara Liu, Lập kế hoạch s
Trang 1Chuẩn bị cho Kỳ thi về Phát triển ứng dụng DB2 9, Phần 1: Các đối tượng cơ
sở dữ liệu và các phương pháp lập trình
Xây dựng nền tảng với những kiến thức cơ sở
Clara Liu, Lập kế hoạch sản phẩm DB2, IBM Toronto Laboratory
Tóm tắt: Bạn sẽ được giới thiệu về các kiểu đối tượng cơ sở dữ liệu và các
phương pháp lập trình khác nhau Đây là hướng dẫn đầu tiên trong một loạt bài gồm chín hướng dẫn, sử dụng loạt bài này để trợ giúp chuẩn bị cho kỳ thi lấy chứng chỉ Phát triển ứng dụng của Họ DB2® 9 của IBM® (kỳ thi 733)
Trước khi bạn bắt đầu
Hướng dẫn này gồm những gì?
Hướng dẫn này giới thiệu về các kiểu đối tượng cơ sở dữ liệu và các phương pháp lập trình khác nhau Trong hướng dẫn này, bạn tìm hiểu về:
Các kiểu đối tượng cơ sở dữ liệu khác nhau
Mối quan hệ giữa các lược đồ (schema) và các đối tượng cơ sở dữ liệu
Các khái niệm cơ bản về các thường trình (routine) SQL
Cơ sở về giao diện lập trình: SQL nhúng động và tĩnh, CLI và ODBC, NET, JDBC và SQLJ, PHP, Perl, Python và XML
Các lý do bảo đảm an ninh kết hợp với truy cập dữ liệu từ một ứng dụng
Đây là hướng dẫn đầu tiên trong một loạt bài viết gồm chín hướng dẫn mà bạn có thể sử dụng để trợ giúp chuẩn bị cho kỳ thi lấy chứng chỉ Phát triển ứng dụng của
Trang 2Họ DB2 9 của IBM (kỳ thi 733) Các tài liệu trong hướng dẫn này chủ yếu trình bày các mục tiêu trong Phần 1 của kỳ thi, mang tên "Các đối tượng cơ sở dữ liệu
và các phương pháp lập trình" (Database objects and programming methods)
Bạn không cần một bản sao của DB2 9 để hoàn thành hướng dẫn này Tuy nhiên, nếu bạn muốn, bạn có thể tải về miễn phí bản sao của DB2 Express-C 9 từ trang tải về DB2 Express-C
Ai nên tìm hiểu hướng dẫn này?
Để tham dự kỳ thi “Phát triển ứng dụng họ DB2 9”, bạn đã phải vượt qua được kỳ thi “Căn bản về họ DB2 9” (kỳ thi 730) Bạn có thể sử dụng "Loạt bài hướng dẫn căn bản về họ DB2" (DB2 Family Fundamentals tutorial series) để chuẩn bị cho
kỳ thi đó Đây là loạt bài hướng dẫn rất phổ biến, đã giúp cho nhiều người hiểu các vấn đề căn bản về họ các sản phẩm DB2
Mặc dù không phải tất cả các tư liệu được thảo luận trong loạt bài hướng dẫn căn bản về họ DB2 đều là cần thiết để hiểu các khái niệm được mô tả trong hướng dẫn này, bạn cần phải có một kiến thức cơ sở về:
Các cá thể DB2
Các cơ sở dữ liệu
Các đối tượng cơ sở dữ liệu
An ninh DB2
Trang 3Hướng dẫn này là một trong những công cụ có thể trợ giúp bạn chuẩn bị cho Kỳ thi 733 Bạn cũng nên xem lại phần Tài nguyên ở phần cuối của hướng dẫn này để biết thêm thông tin về các đối tượng cơ sở dữ liệu và các phương pháp lập trình
Các đối tượng cơ sở dữ liệu DB2
Các đối tượng cơ sở dữ liệu cơ bản
Các đối tượng cơ sở dữ liệu là các khối nền tảng của một cơ sở dữ liệu DB2 cung cấp các kiểu đối tượng cơ sở dữ liệu khác nhau để lưu trữ và biểu diễn các thông tin khác nhau Các đối tượng này có thể được được tạo ra, được sửa đổi và bị loại
bỏ bằng cách sử dụng database definition language (DDL-Ngôn ngữ định nghĩa
cơ sở dữ liệu ) Để thao tác các đối tượng này, bạn sử dụng database manipulation language (DML- Ngôn ngữ thao tác cơ sở dữ liệu), trong đó bao gồm các câu lệnh
SELECT (Chọn), UPDATE (Cập nhật), INSERT (chèn) và DELETE (Xóa) Một
số các đối tượng cơ sở dữ liệu thường được sử dụng phổ biến là:
Trang 4Ngoài các các đối tượng cơ sở dữ liệu được giới thiệu trong các hướng dẫn căn bản về họ DB2, có nhiều đối tượng khác mà nhiều nhà phát triển thấy là có ích khi phát triển các ứng dụng DB2 Hướng dẫn này giới thiệu các đối tượng ấy trong phần này
Một lưu ý trước khi bạn tiến hành: Trong các ví dụ mà bạn sẽ thấy ở đây, các tên đối tượng được chỉ rõ bằng chữ thường Bất kể nền tảng DB2 đang chạy là gì, nó
sẽ luôn luôn lưu giữ các tên bằng chữ hoa, trừ khi tên của một mã nhận dạng
(identifier) được bao quanh bởi cặp dấu nháy kép ("")
Ví dụ, câu lệnh sau tạo ra một bảng gọi là employee (nhân viên - chữ thường) với
các định nghĩa của cột giống như bảng EMPLOYEE (chữ hoa)
CREATE TABLE "employee" LIKE employee
Các biệt danh
Một biệt danh (alias) là một tên thay thế cho một bảng, một khung nhìn hoặc biệt
hiệu hiện có Một biệt danh cũng có thể dùng như là một tên thay thế cho một biệt danh khác Giống như các đối tượng, một biệt danh có thể được tạo ra hoặc bị hủy
bỏ và nó có thể có các lời chú thích có liên quan với nó Dưới đây là một vài ví dụ
về các câu lệnh CREATE ALIAS:
Trang 5CREATE ALIAS aliastab1 FOR tab1;
CREATE ALIAS bob.aliastab1 FOR tom.tab1;
CREATE SYNONYM bob.aliastab2 FOR bob.aliastab1;
Như bạn có thể thấy, câu lệnh CREATE ALIAS khá đơn giản Bạn có thể tạo một biệt danh trong cùng một lược đồ như là đối tượng nguồn (giống như trong dòng đầu tiên) hoặc tạo tên biệt danh phân biệt đầy đủ (giống như trong dòng thứ hai) Việc sử dụng từ khóa SYNONYM thay cho ALIAS (giống như trong dòng thứ ba) cho tương thích với DB2 cho zSeries cũng là hợp lệ
Không đòi hỏi phải được cấp quyền hoặc có quyền ưu tiên đặc biệt nào để sử dụng các biệt danh Tuy nhiên, bạn cần được cấp quyền thích hợp đối với các đối tượng nền bên dưới đang được tham chiếu Để tìm một danh sách đầy đủ các đặc quyền đối với các đối tượng cơ sở dữ liệu, hãy xem hướng dẫn thi chứng chỉ DBA DB2
có tên "Quản lý máy chủ" (Server management (developerWorks, 06.2006)
Chúng tôi đã nói ở trên rằng các biệt danh cũng có thể được tạo ra cho các biệt
hiệu (nicknames) Các biệt hiệu là các đối tượng cơ sở dữ liệu tham chiếu đến các
bảng dữ liệu hoặc các khung nhìn được đặt trên hệ thống liên hiệp (federated systems) Tuy nhiên, sự hỗ trợ với cơ sở dữ liệu liên hiệp nằm ngoài phạm vi của hướng dẫn này
Để thêm một lời chú thích cho một biệt danh, hay đưa ra câu lệnh này:
Trang 6COMMENT ON aliastab1 IS 'My first alias on tab1'
Để loại bỏ một biệt danh, sử dụng câu lệnh DROP, giống như bạn sẽ làm với bất
kỳ đối tượng cơ sở dữ liệu khác:
DROP ALIAS aliastab1
Các đối tượng chuỗi
Một chuỗi (sequence) là một đối tượng cơ sở dữ liệu cho phép sinh ra các giá trị tự
động Không giống như một cột mã nhận dạng, bị ràng buộc với một bảng cụ thể, một chuỗi là một đối tượng toàn cục và độc lập, có thể được sử dụng bởi bất kỳ bảng nào trong cùng một cơ sở dữ liệu
Một cột mã nhận dạng là một loại đối tượng chuỗi cụ thể Do đó, các đặc điểm của các cột mã nhận dạng cũng áp dụng cho các đối tượng chuỗi Ví dụ về một câu lệnh CREATE SEQUENCE được minh họa dưới đây:
Liệt kê 1 Câu lệnh CREATE SEQUENCE
Trang 7CREATE SEQUENCE myseq AS INTEGER
Như được hiển thị trong Liệt kê 1 ở trên, bạn có thể tùy chỉnh một đối tượng chuỗi bằng cách chỉ rõ giá trị bắt đầu của nó Trong ví dụ này, giá trị đầu tiên cho chuỗi này là 360 Việc tạo ra các giá trị trong chuỗi được kiểm soát bởi mệnh đề
INCREMENT BY Các hằng số dương và âm được hỗ trợ để tạo ra các giá trị chuỗi tăng lên và giảm xuống
Theo mặc định, các giá trị nhỏ nhất và lớn nhất do một chuỗi tạo ra bị ràng buộc bởi sự giới hạn của kiểu dữ liệu chuỗi Ví dụ, một giá trị chuỗi INTEGER (số nguyên) phải nằm trong khoảng từ -2.147.483.647 đến 2.147.483.647 Bạn có thể tìm thấy các giới hạn của tất cả các kiểu dữ liệu số trong Hướng dẫn tham khảo
Trang 8SQL DB2 (xem Tài nguyên) Để thay đổi hành vi này, hãy sử dụng các tùy chọn MINVALUE (giá trị nhỏ nhất) và MAXVALUE (giá trị lớn nhất) để thiết lập một ranh giới cho các giá trị được tạo ra Nếu các giá trị nhỏ nhất hoặc lớn nhất đã đạt tới, một tùy chọn khác, được gọi là CYCLE hay NO CYCLE, (theo chu kỳ hay không theo chu kỳ), có thể được sử dụng để chỉ rõ xem liệu các giá trị chuỗi có nên được tái sử dụng lại hay không Lưu ý rằng khi CYCLE có hiệu lực, các giá trị sao đúp có thể được tạo ra cho chuỗi
Tùy chọn bộ nhớ đệm (CACHE) cho phép DB2 duy trì một số các giá trị đã được cấp phát trước trong bộ nhớ để cải thiện hiệu năng CACHE 20 là hành vi mặc định Có một điều cần nhớ về tùy chọn này: Nếu DB2 bị dừng lại trước khi tất cả các giá trị đã ghi nhớ sẵn được sử dụng, mọi giá trị đã ghi nhớ sẵn và không sử dụng sẽ bị loại bỏ Khi DB2 được khởi động lại, khối các giá trị tiếp theo được tạo
ra và được ghi nhớ sẵn, như vậy sẽ tạo ra khoảng hẫng giữa các giá trị Nếu ứng dụng của bạn không cho phép có các khoảng hẫng giá trị, hãy cân nhắc việc sử dụng tùy chọn NOCACHE (không bộ đệm) để thay thế
Nếu không sử dụng việc ghi nhớ đệm, hiệu năng có thể xấu đi đáng kể đối với tốc
độ tạo số chuỗi cao Một bản ghi nhật ký được viết lại mỗi khi một giá trị mới được tạo ra Kết quả là, sẽ hiệu quả hơn nếu nhận được các giá trị thông qua một yêu cầu và ghi nhớ sẵn chúng vào bộ nhớ
Bạn có thể thay đổi các đặc điểm của một đối tượng chuỗi bằng câu lệnh ALTER SEQUENCE Tất cả các thông số cài đặt được thảo luận ở trên có thể được thay đổi, trừ kiểu dữ liệu của giá trị chuỗi Để có sơ đồ cú pháp đầy đủ, hãy xem
Hướng dẫn tham khảo SQL DB2 (xem Tài nguyên)
Việc hủy bỏ một đối tượng chuỗi cũng giống như hủy bỏ bất kỳ đối tượng cơ sở
dữ liệu khác nào Từ khóa RESTRICT ở cuối của câu lệnh ngăn cho chuỗi khỏi bị
Trang 9hủy bỏ nếu có tồn tại bất kỳ sự phụ thuộc nào Đây là hành vi mặc định Bạn có thể chọn chỉ định rõ ràng từ khóa RESTRICT trong câu lệnh đó
DROP SEQUENCE myseq RESTRICT
Tạo và lấy ra các giá trị chuỗi
Một chuỗi là một kiểu đối tượng cơ sở dữ liệu; do vậy, việc truy cập của nó cũng
được kiểm soát bởi các đặc quyền Theo mặc định, chỉ có người tạo lập (creator) chuỗi, SYSADM và DBADM có các đặc quyền USAGE trên đối tượng đó Nếu bạn muốn những người dùng khác sử dụng chuỗi đó, bạn cần phải sử dụng câu lệnh sau:
GRANT USAGE ON SEQUENCE seq_object_name TO PUBLIC
Nếu bạn muốn thay đổi các thuộc tính của một đối tượng chuỗi, thì bạn cần có đặc quyền ALTER trên đối tượng đó:
GRANT ALTER ON SEQUENCE seq_object_name TO GROUP group_name
Trang 10Hãy xem hướng dẫn thi chứng chỉ DBA DB2 có tên là "Quản lý máy chủ" để tìm hiểu thêm về an ninh DB2
Hai biểu thức được cung cấp để tạo ra và lấy ra các giá trị chuỗi Biểu thức NEXT
VALUE FOR seq-name được sử dụng để nhận được giá trị chuỗi tiếp theo, trong khi biểu thức PREVIOUS VALUE FOR seq-name được sử dụng để lấy ra giá trị
chuỗi cuối cùng đã được tạo ra Các ví dụ trong Liệt kê 2 dưới đây minh họa việc
sử dụng các biểu thức này
Liệt kê 2 Các biểu thức NEXT VALUE FOR và PREVIOUS VALUE FOR
INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'BOB'); INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'PAT');
COMMIT;
INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'GENE');
ROLLBACK;
INSERT INTO t1 VALUES (NEXT VALUE FOR myseq, 'PAUL');
VALUES PREVIOUS VALUE FOR myseq INTO :hostvar
Giả sử rằng bạn bắt đầu với một bảng t1 trống rỗng và giá trị chuỗi tiếp theo của myseq là 1 Sau khi các câu lệnh ở trên được thi hành, với tùy chọn autocommit (tự động cam kết) bị tắt, t1 chứa các hàng sau đây:
Trang 11Câu lệnh cuối cùng trong Liệt kê 2 ở trên cho thấy biểu thức PREVIOUS VALUE
có thể được sử dụng như thế nào Biến chủ :hostvar lưu trữ giá trị cuối cùng được tạo ra trong phiên làm việc hiện tại Nếu bạn muốn giữ lại bất kỳ giá trị nào đã được tạo ra trước đó, bạn nên lưu lại các giá trị trước đó trước khi tạo ra một giá trị tiếp sau
Các bảng tạm thời
Trang 12Như tên của chúng gợi ý, các bảng tạm thời (temporary tables) không phải là các
đối tượng cơ sở dữ liệu cố định Một bảng tạm thời hoạt động giống như một bảng bình thường, ngoại trừ rằng không phải tất cả các tính năng và các tùy chọn đều được hỗ trợ hoặc phải có Nó chỉ tồn tại trong khoảng thời gian kết nối Khi kết nối được đóng lại, tất cả các bảng tạm thời được khai báo trong nó sẽ được tự động loại bỏ
Chỉ có phiên làm việc hay ứng dụng khai báo một bảng tạm thời sẽ có quyền truy cập vào nó Nếu hai ứng dụng tạo ra một bảng tạm thời có cùng tên, mỗi cá thể của bảng đó là duy nhất Vì vậy, bạn không cần phải lo lắng về một sự xuất hiện của kịch bản xung đột dữ liệu tạm thời; vì một bảng tạm thời chỉ cho phép truy cập một kết nối, việc khóa là không cần thiết Đây là một trong những lợi ích hoạt động chính của các bảng tạm thời
Khai báo các bảng tạm thời
Để khai báo các bảng tạm thời, một vùng bảng (tablespace) tạm thời USER phải tồn tại để lưu trữ định nghĩa và nội dung của bảng tạm thời (Một vùng bảng tạm thời USER là khác với một vùng bảng tạm thời SYSTEM, cái sau chỉ được DB2
sử dụng một cách nội bộ để thực hiện các hoạt động, ví dụ như sắp xếp thứ tự) Câu lệnh đơn giản dưới đây tạo ra một vùng bảng tạm thời USER:
CREATE USER TEMPORARY TABLESPACE usertempspace
MANAGED BY SYSTEM USING ('usertempspace')
Trang 13Một số các mệnh đề tùy chọn được hỗ trợ khi khai báo một bảng tạm thời toàn cầu Các ví dụ trong Liệt kê 3 minh họa hoạt động của chúng:
Liệt kê 3 Các mệnh đề tùy chọn được hỗ trợ với bảng tạm thời toàn cầu
DECLARE GLOBAL TEMPORARY TABLE t_dept
( deptid CHAR(6), deptname CHAR(20) )
ON COMMIT PRESERVE ROWS
NOT LOGGED ON ROLLBACK DELETE ROWS
IN usertempspace
Trong ví dụ trong Liệt kê 3, bảng tạm thời t_dept được khai báo có hai cột Mệnh
đề ON COMMIT PRESERVE ROWS cho biết khi một hoạt động COMMIT được thực hiện, các hàng trong bảng tạm thời sẽ được duy trì
Ví dụ trên chỉ rõ rằng những thay đổi với bảng không được ghi nhật ký lại (NOT LOGGED) Điều này có nghĩa là bất cứ các hoạt động chèn, cập nhật hoặc xóa đối với bảng không được ghi lại Tuy nhiên, việc tạo ra và loại bỏ bảng được ghi lại Nếu bảng được tạo ra trong một đơn vị làm việc và sau đó cuộn ngược lại, thì bảng tạm thời sẽ bị loại bỏ Mặt khác, nếu bảng bị loại bỏ trong một đơn vị làm việc, thì bảng đó sẽ được phục hồi lại mà không có bất kỳ hàng nào
Trang 14Bạn không cần phải sử dụng mệnh đề IN để chỉ rõ vùng bảng tạm thời của người
sử dụng mà bảng tạm thời này sẽ sử dụng vùng bảng đó Nếu bạn không định rõ thông tin này, DB2 sẽ tìm kiếm một vùng bảng phù hợp nhất Nếu không tìm thấy một vùng bảng tạm thời của người sử dụng, DB2 sẽ đưa ra một lỗi
Hãy xem xét một ví dụ khác:
Liệt kê 4 Khai báo bảng tạm thời toàn cầu
DECLARE GLOBAL TEMPORARY TABLE t_proj
LIKE project
ON COMMIT PRESERVE ROWS
WITH REPLACE
IN usertempspace
Bảng tạm thời t_proj được khai báo với từ khóa LIKE, do đó, nó có cùng một định
nghĩa cột như là bảng cố định hay khung nhìn có tên là dự án (project) Mệnh đề
ON COMMIT PRESERVE ROWS cho biết rằng tất cả các hàng trong bảng tạm thời sẽ được lưu giữ tại COMMIT Vì vậy, chúng sẽ có sẵn để xử lý tiếp tục trong giao dịch tiếp sau
Trước khi bạn có thể khái báo bảng tạm thời khác có cùng tên trong cùng một phiên làm việc, bảng tạm thời phải được loại bỏ Điều này có thể được thực hiện hoặc dứt khoát hoặc với tùy chọn WITH REPLACE như được hiển thị trong Liệt
Trang 15kê 4 Với tùy chọn WITH REPLACE, DB2 xóa hoàn toàn tất cả các dữ liệu, loại
bỏ bảng tạm thời và tạo lại nó với các định nghĩa mới
Tùy chọn WITH REPLACE trở nên rất dễ dùng khi được sử dụng liên hợp với
việc tạo nhóm kết nối (connection pooling) Việc tạo nhóm kết nối là một cơ chế
để sử dụng lại các kết nối cơ sở dữ liệu, sao cho các tài nguyên không được cấp phát hoặc hủy cấp phát theo yêu cầu Các hoạt động này khá tốn kém, đặc biệt là khi có một số lượng lớn các kết nối có thực hiện các giao dịch tương đối ngắn Do các kết nối không được giải phóng, có thể là các bảng tạm thời được sử dụng trước
đó không được xóa hết Ứng dụng tiếp theo sử dụng kết nối có thể lấy phải các dữ liệu còn sót lại từ việc thi hành trước đó Vì vậy, việc sử dụng tùy chọn WITH REPLACE đảm bảo rằng bảng tạm thời được khai báo sẽ được làm mới với định nghĩa mới
Các lược đồ và các đối tượng cơ sở dữ liệu
Hầu hết các các đối tượng cơ sở dữ liệu được xác định bởi một lược đồ và một tên đối tượng Một lược đồ cơ sở dữ liệu cung cấp một phân loại logic các đối tượng
cơ sở dữ liệu Dưới đây là một số ví dụ về các tên đối tượng có hai phần:
DB2ADMIN.EMPLOYEE
HRPROD.AUDIT_VIEW
HRPROD.AUDIT_TRIG
Trang 16Nếu một lược đồ không được chỉ rõ khi truy cập vào một đối tượng cơ sở dữ liệu,
mã nhận dạng người dùng được sử dụng để thiết lập kết nối cơ sở dữ liệu sẽ được thiết lập như là lược đồ mặc định Ví dụ, nếu người sử dụng db2admin kết nối vào một cơ sở dữ liệu và tạo ra một bảng T1, DB2 sẽ tạo ra một bảng gọi là
db2admin.T1 Tất cả các câu lệnh SQL tiếp sau có tham khảo một bảng T1 có tên không phân biệt đủ, được phân giải đến db2admin.T1
Sổ đăng ký đặc biệt của DB2: CURRENT SCHEMA
Như bạn có thể đã phát hiện ra trong hoạt động cơ sở dữ liệu của bạn, không phải lúc nào cũng khả thi để kết nối đến một cơ sở dữ liệu với mã nhận dạng (ID) của người sử dụng mà tên người dùng (username) của nó cũng là lược đồ của các đối tượng mà bạn muốn thao tác Việc mã hóa cứng (hard-coding) một ứng dụng dùng các tên phân biệt đầy đủ của các đối tượng cũng không phải là giải pháp tốt nhất May mắn thay, DB2 cho phép bạn thay đổi lược đồ hiện tại bằng cách sử dụng lệnh SET CURRENT SCHEMA Theo mặc định, sổ đăng ký đặc biệt CURRENT SCHEMA DB2 được thiết lập theo USER được kết nối vào cơ sở dữ liệu Khi bạn thay đổi CURRENT SCHEMA, bất kỳ các đối tượng cơ sở dữ liệu có tên không phân biệt đầy đủ nào được gắn tiếp đầu ngữ với giá trị mới
Lược đồ hiện tại có thể nhận được bằng lệnh này:
Các đối tượng cơ sở dữ liệu cho phát triển ứng dụng DB2
Trang 17Các thường trình
Trong phần này, bạn sẽ tìm hiểu về một vài kiểu đối tượng cơ sở dữ liệu nữa Các
đối tượng này được gọi chung là các thường trình (routines) Có ba kiểu chức năng chính của thường trình: các thủ tục được lưu sẵn (stored procedures), các hàm (functions) và các phương thức (methods) (Để biết thêm chi tiết về sự khác
nhau giữa các kiểu này, hãy xem phần dưới đây có tên là "Các thủ tục được lưu sẵn, các hàm và các phương thức")
Các thường trình là các đối tượng cơ sở dữ liệu gói kín logic lập trình và logic cơ
sở dữ liệu có liên quan đến một nhiệm vụ cụ thể Bằng cách sử dụng có hiệu quả các thường trình, bạn có thể làm đơn giản hóa mã ứng dụng của bạn và làm tăng khả năng sử dụng lại mã Ví dụ, nếu logic nghiệp vụ nào đó được gói kín trong một thường trình, các thay đổi quy tắc nghiệp vụ ấy sẽ chỉ ảnh hưởng đến thường trình cụ thể đó Kết quả là, các sự thay đổi ứng dụng có thể được làm giảm tối thiểu
Các thường trình được định nghĩa và được xử lý tại máy chủ cơ sở dữ liệu Điều này cho phép một ứng dụng khai thác sức mạnh của máy chủ cơ sở dữ liệu trong khi làm giảm tải xử lý cần thiết tại phía khách Thông thường, một logic nghiệp vụ phức tạp đưa ra nhiều câu lệnh SQL Các câu lệnh này được gửi đi riêng biệt từ máy khách đến máy chủ, dẫn đến lưu lượng mạng cao nếu như có rất nhiều hoạt động của cơ sở dữ liệu Nếu các hoạt động này được bắt giữ trong một thường trình, thì lưu lượng mạng giữa các máy khách và các máy chủ có thể được làm giảm đáng kể, do đó cải thiện hiệu năng ứng dụng tổng thể
Khả năng để thắt chặt an ninh là một lợi thế quan trọng khác của việc sử dụng các thường trình Các thường trình có thể được dùng để che dấu sự truy cập trực tiếp vào các đối tượng cơ sở dữ liệu nằm bên dưới Chỉ cần gọi một thường trình với
Trang 18đặc quyền EXECUTE; không có đặc quyền rõ ràng nào cho các các đối tượng cơ
sở dữ liệu nằm bên dưới
Các triển khai thực hiện thường trình khác nhau
Một số cách triển khai thực hiện các thường trình có khả năng là:
Các thường trình gắn kèm (built-in) đi cùng với hệ thống DB2 Chúng
được định nghĩa trong các lược đồ hệ thống như SYSIBM, SYSPROC, SYSFUN
và SYSTOOLS
Các thường trình có nguồn gốc (sourced) chỉ áp dụng cho các hàm Một
hàm có nguồn gốc sao chép chính xác các ngữ nghĩa của hàm khác
Các thường trình bên ngoài (external) được triển khai thực hiện trong một
ngôn ngữ lập trình bên ngoài Bạn có thể phát triển các thường trình trong các ngôn ngữ được hỗ trợ sau:
Trang 19 Các thường trình SQL Các thường trình SQL được triển khai thực hiện
trong SQL Procedural Language (SQL PL - Ngôn ngữ thủ tục SQL) SQL PL DB2
là một tập con của chuẩn ngôn ngữ SQL Persistent Stored Modules (SQL/PSM - Các mô đun SQL được lưu trữ lâu dài) Tiêu chuẩn này là cơ sở cho các ngôn ngữ lập trình có cấu trúc được sử dụng với SQL để viết các thủ tục được lưu sẵn, các hàm và các phương thức Nó kết hợp việc dễ dàng truy cập dữ liệu của SQL với cấu trúc kiểm soát luồng của một ngôn ngữ lập trình đơn giản Đây là lý do chính tại sao SQL PL lại phổ biến đến vậy
Các thủ tục được lưu sẵn, các hàm và các phương thức
Các thủ tục được lưu sẵn (Stored procedures) là các đối tượng cơ sở dữ liệu có
chứa các chương trình chuyên dụng để truy cập và sửa đổi dữ liệu trong một hoặc nhiều bảng Trong một thủ tục được lưu sẵn, bạn có thể bao bọc nhiều câu lệnh SQL với logic luồng Chúng dùng như các mở rộng của thường trình con
(subroutine) cho các ứng dụng khách hay các thường trình khác Chúng được thi hành và được quản lý dưới sự kiểm soát của một hệ quản lý cơ sở dữ liệu quan hệ (RDBMS)
Các hàm (Functions) các mở rộng SQL mà bạn có thể tùy chỉnh Chúng được gọi
từ bên trong các câu lệnh SQL như các danh sách chọn (select-list) hoặc các mệnh
đề FROM Có bốn kiểu hàm: aggregate, scalar, row và table
Các thủ tục được lưu sẵn thường được sử dụng để gói kín logic ứng dụng phức tạp
và thực hiện các hoạt động cơ sở dữ liệu nặng, chẳng hạn như các phép nối nhiều bảng và các thao tác con trỏ Mặt khác, các hàm đặc biệt là các hàm SQL thường có chứa các hoạt động đơn giản hơn Các câu lệnh được mã hóa trong các
Trang 20hàm SQL được khai triển vào trong và thi hành với các câu lệnh SQL tham chiếu chúng Điều này làm cho các câu lệnh được biên dịch động tại thời điểm thi hành Nếu một hàm SQL phức tạp được sử dụng trong một câu lệnh SQL, DB2 yêu cầu tài nguyên bổ sung để biên dịch nó và tạo ra một kế hoạch truy cập dữ liệu Điều này có thể ảnh hưởng đến hiệu năng thời gian chạy tổng thể
Một phương thức ( method ) bao kín logic để cung cấp hành vi hoạt động cho các
kiểu dữ liệu có cấu trúc, chứa một hay nhiều thuộc tính có tên, mỗi một thuộc tính lại có kiểu dữ liệu riêng của nó
Sổ đăng ký đặc biệt của DB2: CURRENT PATH
Giống như hầu hết các đối tượng cơ sở dữ liệu DB2, một tên thường trình đầy đủ gồm có một lược đồ và một tên thường trình Sổ đăng ký đặc biệt DB2 được giới thiệu ở phần trên trong hướng dẫn này, CURRENT SCHEMA (nó cũng được thảo luận ở trên trong phần có tên là "Sổ đăng ký đặc biệt DB2: CURRENT SCHEMA
"), phân giải các lược đồ cho hầu hết các đối tượng cơ sở dữ liệu, nhưng không phải cho các thường trình Thay vào đó, DB2 bố trí một thường trình bằng việc sử dụng một sổ đăng ký đặc biệt CURRENT PATH
Bạn có thể nhận được các giá trị cài đặt CURRENT PATH với lệnh này:
VALUES CURRENT PATH
Trang 21Đường dẫn mặc định chứa ba lược đồ hệ thống, tiếp theo sau là người sử dụng hiện tại được kết nối vào cơ sở dữ liệu Ví dụ:
"SYSIBM","SYSFUN","SYSPROC","DB2ADMIN"
Dưới đây là một vài ví dụ về các thủ thuật mà bạn có thể sử dụng để cập nhật PATH:
Liệt kê 5 Cập nhật PATH: Ví dụ 1
SET PATH=CURRENT PATH,"USER2"
VALUES CURRENT PATH
-
"SYSIBM","SYSFUN","SYSPROC","DB2ADMIN","USER2"
1 record(s) selected
Liệt kê 6 Cập nhật PATH: Ví dụ 2
SET PATH=SYSTEM PATH,"USER2"
Trang 22VALUES CURRENT PATH
Trang 23nhúng Phương pháp lập trình này là trực tiếp vì chương trình được nhúng các câu
lệnh SQL tương tác trực tiếp với DB2 Các chương trình có thể được viết bằng bất
kỳ các ngôn ngữ lập trình nào được hỗ trợ sau đây:
Bạn cấu trúc các câu lệnh SQL nhúng của bạn phụ thuộc vào ngôn ngữ lập trình
mà bạn chọn như thế nào Các câu lệnh SQL nhúng trong C/C++ và FORTRAN được gắn tiếp đầu ngữ với từ khóa EXEC SQL:
EXEC SQL SELECT lastname,empid INTO :hostvar1, :hostvar2
FROM employee WHERE deptno="OPERATIONS";
Các câu lệnh SQL nhúng trong COBOL là rất giống với các câu lệnh được mã hóa trong C/C++, ngoại trừ từ khóa END-EXEC là bắt buộc ở phần cuối của câu lệnh:
EXEC SQL SELECT lastname,empid INTO :hostvar1, :hostvar2