Tải bản đầy đủ (.pdf) (47 trang)

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 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (338.09 KB, 47 trang )

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ả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
Họ 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.
Hướ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à:
 Các bảng.
 Các kiểu dữ liệu do người sử dụng định nghĩa.
 Các ràng buộc.
 Các khung nhìn.
 Các chỉ mục.
Nếu bạn còn chưa hiểu rõ về các đối tượng cơ sở dữ liệu cơ bản này, xin vui lòng
xem hướng dẫn căn bản về họ DB2, mang tên "Làm việc với các đối tượng DB2"

(Working with DB2 objects) (developerWorks, 07.2006) về các thông tin nền.
Ngoà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:
CREATE 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:
COMMENT 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

CREATE SEQUENCE myseq AS INTEGER
START WITH 360
INCREMENT BY 10
NO MAXVALUE
CYCLE
CACHE 20

Bất kỳ một kiểu dữ liệu số chính xác nào không có phần lẻ (scale of zero) đều có
thể được sử dụng cho giá trị chuỗi. Chúng gồm có SMALLINT, INTEGER,
BIGINT hoặc DECIMAL. Bất kỳ một kiểu khác biệt nào do người sử dụng định
nghĩa dựa trên các kiểu dữ liệu này cũng có thể được sử dụng cho các giá trị chuỗi.
Điều này mở rộng thêm nữa việc sử dụng các kiểu khác biệt do người dùng định
nghĩa trong một ứng dụng.
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
SQL 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ị
hủ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

Hã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:
1 NAME

1 BOB
2 PAT
4 PAUL


3 record(s) selected.

Mặc dù giá trị được tạo ra cho GENE đã được rút khỏi cam kết, DB2 sẽ không sử
dụng lại nó. Do đó, giá trị chuỗi tiếp theo đã được tạo ra cho PAUL đã là 4 chứ
không phải là 3.
Câ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
Như 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')

Mộ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.
Bạ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
kê 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

Nế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
Cá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
đặ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:
o Ngôn ngữ Java™.
o C/C++.
o .NET.
o OLE (chỉ với các thủ tục được lưu sẵn).
o OLE DB (chỉ với các hàm bảng).
 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
hà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

Đườ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"
VALUES CURRENT PATH

"SYSIBM","SYSFUN","SYSPROC","USER2"
1 record(s) selected.


Liệt kê 7. Cập nhật PATH: Ví dụ 3
SET PATH="USER1","USER2","USER3"
VALUES CURRENT PATH

"USER1","USER2","USER3"

1 record(s) selected.


Các chương trình SQL nhúng
Mở đầu về SQL nhúng
DB2 cung cấp các phương pháp lập trình khác nhau cho các nhà phát triển để viết
các ứng dụng. Một trong những cách tiếp cận trực tiếp nhất là việc lập trình SQL
nhú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:
 C/C++
 Ngôn ngữ Java (SQLJ)
 FORTRAN
 COBOL
 REXX

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
FROM employee WHERE deptno="OPERATIONS" END-EXEC;

Các câu lệnh SQL nhúng trong ngôn ngữ Java có hơi khác với các ngôn ngữ được
cho thấy trong hai ví dụ trước ở chỗ là phải chỉ rõ bối cảnh kết nối trong đó câu
lệnh được thi hành. Dưới đây là một ví dụ:

#sql [myConnCtx] {SELECT lastname, empid INTO :hostvar1, :hostvar2
FROM employee WHERE deptno="OPERATIONS"};

Để đem lại cho bạn một ý tưởng tốt hơn về một chương trình SQL nhúng trông
như thế nào, Liệt kê 8 chứa một đoạn mã chương trình như vậy được viết bằng
ngôn ngữ C. Trong hướng dẫn thứ tư trong loạt này (xem Tài nguyên), bạn sẽ tìm
hiểu thêm về việc biên dịch trước chương trình và phát triển mã thực tế.

Liệt kê 8. Đoạn mã của chương trình SQL nhúng được viết bằng ngôn ngữ C
int TbBasic(void)
{
int rc = 0;
struct sqlca sqlca;

EXEC SQL BEGIN DECLARE SECTION;
char hostVarStmt[50];
EXEC SQL END DECLARE SECTION;

/* declare cursor */
EXEC SQL DECLARE c1 CURSOR FOR
SELECT deptnumb, deptname FROM org WHERE deptnumb = 40;

/* open cursor */
EXEC SQL OPEN c1;

/* fetch cursor */
EXEC SQL FETCH c1 INTO :deptnumb, :deptname;

while (sqlca.sqlcode != 100)
{

×