1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 9: Các thường trình do người dùng định nghĩa doc

80 313 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 390,42 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mã đối với các hàm trong được lưu trữ trong các bảng danh mục catalog cơ sở dữ liệu, trong khi các hàm ngoài chỉ là các tham chiếu đến nơi trong hệ thống tệp, mà các mã của ngôn ngữ lập

Trang 1

Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 9: Các thường

trình do người dùng định nghĩa

Tích hợp logic nghiệp vụ phức tạp và có tùy biến vào các câu lệnh SQL của bạn

Ted J Wasserman, Tư vấn CSDL, IBM

Tóm tắt: Tìm hiểu cách tạo và sử dụng các thường trình do người dùng định

nghĩa trong DB2® 9 của IBM® Đây là hướng dẫn cuối cùng trong một loạt bài 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 cấp chứng chỉ Phát triển ứng dụng DB2 9 (kỳ thi 733)

Trước khi bạn bắt đầu

Về loạt bài này

Chứng chỉ Nhà phát triển ứng dụng được IBM công nhận xác nhận với những người khác rằng bạn là một nhà phát triển ứng dụng mức trung cấp hoặc cao cấp

về DB2 cho Linux™, UNIX® và Windows® Nó cũng chỉ ra rằng bạn có các kỹ năng giỏi trong tất cả các nhiệm vụ lập trình chung cũng như lập trình SQL nhúng, lập trình ODBC/CLI, lập trình.NET hoặc lập trình Java ™

Loạt bài gồm chín hướng dẫn miễn phí này được thiết kế để giúp bạn chuẩn bị cho

kỳ thi lấy chứng chỉ Phát triển ứng dụng DB2 9 cho Linux, UNIX và Windows (kỳ thi 733) Mỗi hướng dẫn bao gồm một liên kết đến một bản tải về dùng thử miễn phí DB2 9 cho Linux, UNIX và Windows Các hướng dẫn này cung cấp một cơ sở vững chắc cho mỗi phần của kỳ thi Tuy nhiên, bạn không nên dựa vào các hướng dẫn này như là sự chuẩn bị duy nhất của bạn cho kỳ thi này

Trang 2

Hướng dẫn này trình bày về cái gì?

Trong hướng dẫn này, bạn sẽ tìm hiểu về cách tạo và sử dụng các thường trình do người dùng định nghĩa trong DB2 9 Bạn sẽ thấy cách có thể sử dụng các đối tượng ứng dụng cơ sở dữ liệu phía máy chủ để đơn giản hóa và tăng tốc độ các ứng dụng của bạn Hướng dẫn này bao gồm các chủ đề sau:

 Các hàm do người dùng định nghĩa

 Các thủ tục lưu sẵn

 DB2 Developer Workbench (Bàn làm việc của nhà phát triển DB2)

Đây là hướng dẫn cuối cùng trong một loạt gồm chín hướng dẫn mà bạn có thể sử dụng để trợ giúp chuẩn bị cho việc cấp chứng chỉ Phát triển ứng dụng DB2 9 (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 của Phần

9 của kỳ thi, mang tên "Các thường trình do người dùng định nghĩa"

Các yêu cầu hệ thống

Bạn không cần dùng một bản sao của DB2 9 để hoàn tất hướng dẫn này; tuy

nhiên, bạn có thể tải về một bản DB2 Express C miễn phí từ trang web DB2

Express-C để thực hành các kỹ năng của bạn DB2 Developer Workbench cũng có sẵn để tải về miễn phí từ trang Web Fix Pack DB2 9

Trang 3

Xin lưu ý rằng một số tài liệu được thảo luận trong hướng dẫn này chỉ áp dụng với DB2 cho Linux, UNIX và Windows và không cho DB2 trên nền tảng khác, chẳng hạn như Hệ thống z hoặc Hệ thống i

Ai nên dùng hướng dẫn này?

Hướng dẫn này được thiết kế cho bất kỳ ai quan tâm đến việc học tập về các khái niệm lập trình DB2 cao cấp và chuẩn bị cho kỳ thi lấy chứng chỉ phát triển ứng dụng DB2 9 (kỳ thi 733)

Các điều kiện cần trước

Trước khi tham dự kỳ thi 733, bạn phải vượt qua được kỳ thi về các khái niệm cơ bản của Họ DB2 9 (kỳ thi 730) Bạn có thể sử dụng Loạt bài hướng dẫn các khái niệm cơ bản của họ DB2 để giúp chuẩn bị cho kỳ thi đó

Đối với hướng dẫn này để có ích, bạn cần phải có kiến thức nền tảng về hoạt động của cơ sở dữ liệu quan hệ cũng như các kiến thức cơ bản về các khái niệm sau đây:

 Các cơ sở dữ liệu

 Các cấu trúc lập trình cơ sở dữ liệu

 Biên dịch ứng dụng

Trang 4

Xem xét lại thuật ngữ

Trước khi bắt đầu hướng dẫn này, bạn nên hiểu rõ khái niệm về một kế hoạch truy cập SQL Nói ngắn gọn, một kế hoạch truy cập là tập hợp các bước mà DB2 sử

dụng để thực hiện một câu lệnh SQL và truy cập dữ liệu Nó bao gồm các chỉ mục được sử dụng, các thời điểm trong đó các trường được lấy ra từ các bảng cơ sở dữ liệu và thứ tự các bước có thực hiện truy vấn Kế hoạch truy cập được nhân cơ sở

dữ liệu tạo ra dựa trên câu lệnh SQL được đệ trình Lý tưởng, cơ sở dữ liệu lựa chọn kế hoạch truy cập tối ưu - đó là, kế hoạch sẽ trả về dữ liệu hiệu quả và nhanh chóng nhất

Các hàm do người dùng định nghĩa

Các hàm do người dùng định nghĩa là gì?

Các hàm do người dùng định nghĩa (User-defined functions - UDFs) là các hàm

được người sử dụng định nghĩa chạy trong nhân cơ sở dữ liệu Các UDF gói gọn một bộ các câu lệnh SQL hay các câu lệnh theo thủ tục chạy thường xuyên trong một đơn vị Điều này được lợi về quản lý mã thay vì phải lặp lại liên tục logic phức tạp hay logic bình thường trong nhiều câu lệnh, bạn có thể cô lập logic đó trong một hàm đơn

Trong DB2, có một số kiểu hàm khác nhau cũng như các ngôn ngữ lập trình khác nhau mà bạn có thể viết chúng theo các ngôn ngữ đó Liệt kê sau đây tóm tắt các kiểu hàm khác nhau trong DB2:

Trang 5

Hàm vô hướng SQL : Trả về một giá trị kiểu dữ liệu nhờ SQL

Hàm hàng SQL : Trả về một hàng dữ liệu nhờ SQL

Hàm bảng SQL : Trả về một bảng SQL dựa trên SQL

Hàm vô hướng bên ngoài : Trả về một kiểu dữ liệu; được viết bằng một

ngôn ngữ lập trình bên ngoài

Hàm bảng bên ngoài : Trả về một bảng đầy đủ; được viết bằng một ngôn

ngữ lập trình bên ngoài

Hàm bảng bên ngoài OLE DB : Một hàm bảng bên ngoài OLE DB do

người dùng định nghĩa được đăng ký trong cơ sở dữ liệu để truy cập dữ liệu

từ một nhà cung cấp OLE DB

Hàm có nguồn gốc hoặc Khuôn mẫu : Dựa vào hàm hoặc khuôn mẫu

khác

Như bạn thấy trong danh sách trên, các kiểu hàm này chủ yếu chia thành hai kiểu

hàm khác biệt Kiểu chung nhất là một hàm trong hay SQL, đó là một hàm được

viết khi sử dụng một tập hợp con của ngôn ngữ thủ tục SQL của DB2 (DB2's SQL Procedural Language - SQL PL) Các hàm cũng có thể được viết bằng các ngôn ngữ lập trình bên ngoài như C/C++, VB.NET hoặc ngôn ngữ Java Các hàm này

được gọi là các hàm ngoài Mã đối với các hàm trong được lưu trữ trong các bảng

danh mục (catalog) cơ sở dữ liệu, trong khi các hàm ngoài chỉ là các tham chiếu đến nơi trong hệ thống tệp, mà các mã của ngôn ngữ lập trình ngoài đã biên dịch được lưu trữ ở đó

Một sự khác nhau quan trọng giữa các hàm SQL và các hàm ngoài là vị trí mà bạn dịch chúng Một hàm SQL có thể được dịch hoặc từ xa hoặc tại chỗ, do nó sẽ được lưu trữ trong các bảng danh mục của cơ sở dữ liệu Một hàm ngoài không linh

Trang 6

hoạt Nó phải được biên dịch trên máy tính có một trình biên dịch thích hợp, với thư viện biên dịch sau đó chuyển sang máy chủ Đôi khi, tùy thuộc vào ngôn ngữ lập trình được sử dụng, hệ điều hành và phần cứng bên dưới cần phải có cùng trên

cả hai máy biên dịch và máy chủ cơ sở dữ liệu cho mã đã dịch hoạt động Đây là một lý do các hàm SQL thường được ưa thích hơn các hàm ngoài, đặc biệt là trong các ứng dụng cần nhiều hệ điều hành và nhiều cấu hình phần cứng

Liệt kê sau đây tóm tắt các ngôn ngữ lập trình mà bạn có thể dùng để viết các UDF:

 SQL PL của DB2 (với các hàm được viết khi sử dụng một hoặc nhiều câu lệnh SQL)

 C/C++

 Ngôn ngữ Java

 Ngôn ngữ.NET CLR như C#

 OLE

Bạn sẽ tìm hiểu về các hàm SQL và các hàm ngoài trong hai phần tiếp theo Bạn

sẽ tìm hiểu sâu hơn các hàm SQL, bởi vì chúng là kiểu chung nhất

Các hàm SQL do người dùng định nghĩa

Tạo một hàm

Trang 7

Các hàm SQL rất dễ tạo ra và sử dụng trong các ứng dụng Các câu lệnh CREATE FUNCTION định nghĩa các đặc tính và logic của hàm, được lưu trữ trong danh

mục hệ thống DB2 Hoạt động này được gọi là đăng ký một hàm Một phiên bản

đơn giản của sơ đồ cú pháp CREATE FUNCTION được hiển thị trong Liệt kê 1, với giải thích về các bộ phận chính của nó:

Liệt kê 1 Sơ đồ cú pháp CREATE FUNCTION

Trang 9

Các mệnh đề phổ biến nhất của câu lệnh CREATE FUNCTION như sau:

 function-name: Tên của hàm

Kiểu RETURNS: Kiểu của hàm đang được tạo Các kiểu có sẵn là hàm vô hướng, hàng và bảng Bạn sẽ tìm hiểu về từng kiểu hàm chi tiết hơn trong

các phần tương ứng có tên "Các hàm vô hướng," "Các hàm hàng" và "Các

Trang 10

hàm bảng" dưới đây Để chỉ rõ một hàm vô hướng, bạn chỉ cần nhận biết kiểu dữ liệu đang được trả về (bạn không cần phải sử dụng từ khóa

 EXTERNAL ACTION (Hoạt động bên ngoài): Xác định xem hàm có bất

kỳ tác động nào đến các chương trình bên ngoài không

 [READS|CONTAINS|MODIFIES] SQL: Xác định hàm này tương tác với

cơ sở dữ liệu thông qua SQL như thế nào

 SQL-function-body: (thân hàm SQL): Đây là cốt lõi của hàm, nơi mà câu lệnh CREATE FUNCTION có chứa logic

Câu lệnh CREATE FUNCTION

Phần này trình bày một số ví dụ mã cho biết ý nghĩa của các mệnh đề trong câu lệnh CREATE FUNCTION

Trang 11

RETURNS

Mệnh đề RETURNS xác định kiểu của hàm được tạo Ba kiểu chính là scalar, row

và table Một hàm vô hướng, như ví dụ hiển thị trong Liệt kê 2, trả về một giá trị

Trang 12

CREATE FUNCTION fromperson (p person)

RETURNS ROW (name VARCHAR(10), firstname

RETURN VALUES (p name, p firstname)

Một hàm bảng, như ví dụ được hiển thị trong Liệt kê 4, trả về không hay nhiều hàng của một bảng Bảng này có thể được tạo ra từ một câu lệnh SQL hoặc từ logic lập trình

Liệt kê 4 Một hàm bảng đơn giản

CREATE FUNCTION deptemployees (deptno CHAR(3))

Trang 13

SELECT empno, lastname, firstnme, deptname

FROM employee, department

WHERE employee.workdept = department.deptno

SPECIFIC

Mệnh đề SPECIFIC được sử dụng để cung cấp cho hàm một tên xác định

(identifier) Bạn có thể sử dụng tên này khi bạn đang tìm nguồn, loại bỏ hoặc thêm

Trang 14

một lời ghi chú cho hàm đó Điều này đặc biệt có ích khi bạn sử dụng các hàm quá tải Hai hàm được chỉ ra trong Liệt kê 5 minh họa sự quá tải hàm Hàm đầu tiên thêm hai số nguyên với nhau Hàm thứ hai nối chuỗi new_ với một chuỗi đầu vào Chú ý rằng cả hai hàm có cùng tên, nhưng có một số các tham số đầu vào khác nhau

Liệt kê 5 Các hàm vô hướng quá tải

Trang 15

CREATE FUNCTION joinData (x VARCHAR(10))

bỏ Tuy nhiên, nếu bạn đã cho hàm đó một tên SPECIFIC bạn chỉ có thể sử dụng tên đó để chỉ hàm ví dụ DROP SPECIFIC FUNCTION join_int2

DETERMINISTIC

Mệnh đề DETERMINISTIC được sử dụng để chỉ rõ một hàm có hay không

thường xuyên trả về cùng giá trị Thông tin này sau đó có thể được DB2 sử dụng

để tối ưu hoá cách thức gọi hàm, do DB2 sẽ nhớ nhanh (cache) giá trị của hàm nếu

nó đã được chạy một lần trước đó và tất định Nếu một hàm sử dụng bất kỳ các số

Trang 16

đăng ký đặc biệt nào hoặc gọi bất kỳ các hàm không tất định nào, nó được coi là không tất định

Liệt kê 6 chỉ ra một ví dụ về một hàm vô hướng xác định, trong khi Liệt kê 7 chỉ

ra một ví dụ về một hàm vô hướng không tất định:

Liệt kê 6 Một hàm vô hướng tất định

Trang 17

RETURN CURRENT DATE + x MONTHS

Kết quả của việc thực hiện hàm trong Liệt kê 6 luôn luôn là như nhau cho mỗi cặp đầu vào (x,y) Tuy nhiên, hàm trong Liệt kê 7 không phải lúc nào cũng tạo ra cùng một giá trị, vì nó yêu cầu tìm ngày tháng hiện tại

Hoạt động bên ngoài

Mệnh đề này chỉ rõ một hàm có hay không thay đổi bất kỳ các đối tượng nào bên ngoài cơ sở dữ liệu Tùy chọn này phải được đặt EXTERNAL ACTION nếu hàm này thực hiện bất kỳ hành động nào có tác động bên ngoài Một ví dụ sẽ là một hàm có sửa đổi một tệp trong hệ thống tệp hoặc thay đổi dữ liệu trong một nguồn bên ngoài

[CONTAINS|READS|MODIFIES] SQL

Trang 18

Tùy chọn này cho DB2 biết cách một hàm sẽ tương tác với cơ sở dữ liệu Có ba sự lựa chọn:

 CONTAINS SQL: Chỉ định các câu lệnh SQL không đọc lẫn không sửa đổi

dữ liệu SQL có thể được sử dụng trong hàm đó

 READS SQL DATA: Chỉ định các câu lệnh không sửa đổi dữ liệu SQL có thể được sử dụng trong hàm đó

 MODIFIES SQL DATA: Chỉ định tất cả các câu lệnh SQL ở dạng câu lệnh phức hợp động có thể được sử dụng trong hàm đó

Các quy tắc của hàm

Có một số các hạn chế về các hàm mà bạn cần phải biết được:

 Nếu một hàm SQL chứa nhiều tham chiếu đến thanh ghi đặc biệt về ngày tháng hoặc thời gian, thì tất cả các tham chiếu trả về cùng một giá trị

 Thân của một hàm SQL không thể gọi đệ quy đến chính nó hoặc một hàm hay phương thức khác gọi nó

 Ngôn ngữ được các hàm SQL sử dụng thực sự là một tập hợp con của ngôn ngữ SQL PL được các thủ tục lưu sẵn Như vậy, một vài cấu trúc ngôn ngữ

có thể được sử dụng trong các thủ tục lưu sẵn là không sẵn sàng trong các hàm

Trang 19

Sử dụng các câu lệnh phức hợp trong các hàm

Một câu lệnh phức hợp SQL là một nhóm các câu lệnh chứa trong một khối BEGIN END Các câu lệnh SQL trong khối được xử lý như là một đơn vị đơn

Liệt kê 8 cho thấy sơ đồ cú pháp của một khối SQL phức hợp động:

Liệt kê 8 Sơ đồ cú pháp cho một câu lệnh SQL phức hợp động

Trang 21

condition-declaration:

->

Trang 23

ngoại trừ kiểu dữ liệu XML Nếu chưa cho giá trị mặc định đối với một kiểu dữ liệu, khi khai báo nó sẽ tự động được thiết lập là NULL Dưới đây là một số ví dụ:

DECLARE myInt INTEGER;

DECLARE myChar CHAR(6);

DECLARE myInt2 INTEGER DEFAULT 0;

DECLARE myChar2 VARCHAR(100) DEFAULT NULL;

XỬ LÝ ĐIỀU KIỆN

Tùy chọn xử lý điều kiện (CONDITION HANDLING) hiện không dùng cho các hàm

Các câu lệnh kiểm soát SQL

Lưu ý rằng không phải tất cả các câu lệnh được dùng trong các thủ tục lưu sẵn SQL là có trong các UDF Hơn nữa, một số các câu lệnh trong sơ đồ cú pháp nêu trên chỉ được hỗ trợ trong các hàm bảng Những câu lệnh khác, chẳng hạn như câu lệnh CALL cũng có những hạn chế nhất định về cách chúng có thể được sử dụng trong các hàm

Do có một số khác biệt giữa việc sử dụng các câu lệnh thủ tục trong các hàm và trong các thủ tục, phần dưới đây với tên "Các thủ tục lưu sẵn" trình bày cách sử dụng nâng cao hơn về các câu lệnh SQL phức hợp và cung cấp thêm các ví dụ

Trang 24

Các hàm vô hướng

Một hàm vô hướng SQL là kiểu hàm SQL phổ biến nhất Nó trả về một giá trị theo

một kiểu dữ liệu mà DB2 cho phép Ví dụ đơn giản trong Liệt kê 9 minh họa cách bạn có thể nhúng logic vào trong một hàm thay vì một ứng dụng khách Hàm CHANGESAL được tạo bởi dòng đơn trong mã thủ tục: RETURN sal * 2 Các phần khác tạo nên định nghĩa hàm Hàm nhận con số tiền lương của một nhân viên (một giá trị DOUBLE) làm đầu vào Nó cũng chấp nhận các giá trị số khác, chẳng hạn như một số nguyên INTEGER, do DB2 ngầm định tạo khuôn mẫu chúng cho bạn

Liệt kê 9 Một hàm vô hướng đơn giản do người dùng định nghĩa

Trang 25

Liệt kê 10 chỉ ra một ví dụ về cách bạn có thể thực hiện hàm như một phần của một câu lệnh SQL:

Liệt kê 10 Thực hiện một hàm CHANGESAL do người dùng định nghĩa

Trang 26

Các hàm vô hướng thường phức tạp hơn hàm này và thường liên quan đến logic và các lệnh SQL khác phức tạp hơn Liệt kê 11 chỉ ra một ví dụ về một hàm vô

hướng phức tạp hơn có trả về số nhân viên đã đạt được trình độ giáo dục bằng với cái được xác định như đầu vào của hàm đó:

Liệt kê 11 Một hàm phức tạp hơn do người dùng định nghĩa

WHERE edLevel = v_edLevel

Sau đó bạn có thể sử dụng hàm này trong một câu lệnh SQL, như trong Liệt kê 12, dưới đây:

Trang 27

Liệt kê 12 Thực hiện hàm EDCOUNT do người dùng định nghĩa

Trang 28

17 7

18 7

19 1

20 1

Ở mức thấp, khi gọi ra các hàm SQL, DB2 nhận logic hàm và nội tuyến nó vào

trong câu lệnh SQL Điều này có nghĩa là lời gọi hàm trong các câu lệnh SQL thực

sự được thay thế bằng logic hàm Kết quả là, trình tối ưu hóa (optimizer) của DB2 tạo ra một kế hoạch truy cập được tối ưu hóa cho toàn bộ câu lệnh chứ không chỉ cho một phần của nó Điều này dẫn tới kế hoạch truy cập tổng thể tốt hơn Ví dụ, Liệt kê 13 chỉ ra câu lệnh SQL được viết lại từ Liệt kê 10:

Liệt kê 13 Câu lệnh SQL được viết lại từ Liệt kê 10

Trang 29

Sự nội tuyến hóa của câu lệnh SQL được hiển thị trong Liệt kê 12 là phức tạp hơn câu lệnh SQL đơn giản ban đầu Liệt kê 14 chỉ ra câu lệnh được viết lại:

Liệt kê 14 Câu lệnh SQL được viết lại từ Liệt kê 12

Trang 30

AS Q6

Các hàm hàng

Một hàm hàng không trả về một hàng dữ liệu, như bạn có thể mong đợi từ tên của

nó Nó thực sự được sử dụng để biến đổi một kiểu dữ liệu có cấu trúc thành các thành phần riêng biệt của nó Các kiểu có cấu trúc do người dùng định nghĩa

(UDST) là các kiểu dữ liệu được người sử dụng định nghĩa với tham chiếu đến một hoặc nhiều kiểu dữ liệu DB2 Do đó, bạn sẽ chỉ sử dụng các hàm hàng khi bạn đang sử dụng các UDST trong cơ sở dữ liệu của bạn Các hàm hàng chỉ có thể được định nghĩa như là các hàm SQL

Đối tượng NGƯỜI (PERSON) trong Liệt kê 15 là một ví dụ về một UDST Nó chứa một trường lastName và firstName Hàm hàng có tên là FROMPERSON có thể được sử dụng để trích xuất các trường cụ thể từ một thể hiện của kiểu

Trang 31

lastname VARCHAR(20),

firstname VARCHAR(20))

MODE DB2SQL

CREATE FUNCTION fromperson (p person_t)

RETURNS ROW (lname VARCHAR(20), fname

Một trong những khía cạnh mạnh hơn của các hàm DB2 là khả năng của chúng trả

về toàn bộ một bảng dữ liệu thay vì một giá trị Điều này mở nhiều nguồn thông

Trang 32

tin mà bạn có thể sử dụng trong câu lệnh SQL của bạn Thay vì tham chiếu đến một bảng cơ sở dữ liệu, bạn có thể viết một hàm C để trả về một luồng dữ liệu sống động, chẳng hạn như dữ liệu của thị trường chứng khoán ở dạng bảng

Các hàm bảng thực sự khá dễ viết Thay vì trả lại một giá trị dữ liệu, như là hàm

vô hướng làm, hàm bảng trả về các hàng của một bảng bạn xác định, như là Liệt

kê 16 minh họa:

Liệt kê 16 Một hàm bảng đơn giản

Trang 33

RETURN

SELECT ROW_NUMBER() OVER(), e.empno,

e.lastname, e.firstnme

FROM employee e

WHERE e.workdept = p_dept

Hàm này liệt kê danh sách một tập hợp các nhân viên của một bộ phận Nó chấp nhận một tham số đầu vào theo kiểu VARCHAR Bảng do hàm trả về được tạo từ bốn cột, cột đầu tiên là một số nguyên INTEGER, các cột còn lại là các

VARCHAR Hàm trả về một tập hợp các hàng do câu lệnh SELECT định nghĩa Cột đầu tiên của câu lệnh SELECT là một biểu thức đặc biệt để tạo ra việc sử dụng các hàm gộp của DB2 Biểu thức này trả về một giá trị số nguyên cho mỗi hàng, bắt đầu bằng số một và tăng dần lên một ở mỗi hàng kế tiếp Các giá trị cho các cột khác được lấy từ bảng NHÂN VIÊN (EMPLOYEE), nhưng chỉ với các hàng ở đó số bộ phận khớp với giá trị của tham số đầu vào Như bạn có thể thấy được, biểu thức ROW_NUMBER() OVER() là một cách rất thuận tiện để tự động tạo ra chuỗi các số đối với tập kết quả có tác dụng đánh số từng hàng trong tập kết quả

Để gọi ra một hàm bảng, bạn phải tham chiếu nó trong mệnh đề FROM của truy vấn và bọc nó trong hàm được gọi là TABLE Liệt kê 17 chỉ ra một ví dụ về cách bạn sẽ gọi hàm bảng được hiển thị trong Liệt kê 16:

Liệt kê 17 Gọi ra hàm bảng GETENUMEMPLOYEE

Trang 34

SELECT * FROM TABLE(getEnumEmployee('E11')) AS myNewTable

Result from the DB2 sample database:

ENUM EMPNO LASTNAME FIRSTNME

Trang 35

Có một số hạn chế cần lưu ý khi làm việc với các hàm bảng Trước tiên, bạn phải biết số lượng các cột và các kiểu dữ liệu trong bảng là kết quả hàm sẽ trả về Nếu một hàm hướng đến tất cả các cột của bảng và sau này bạn thêm một cột vào bảng

đó, thì hàm có thể không hoạt động như mong đợi Ví dụ, giả sử bảng và hàm được hiển thị trong Liệt kê 18 được tạo ra, sau đó có một cột bổ sung sau này được thêm vào bảng sử dụng một câu lệnh ALTER:

Liệt kê 18 Hàm bảng và bảng đơn giản

CREATE FUNCTION returnAllTest (v_v1 int)

RETURNS TABLE (v_varOne INT,

v_varTwo INT)

LANGUAGE SQL

Trang 36

ALTER TABLE testTab ADD varThree int

Trong trường hợp này, một cuộc gọi đến hàm không còn trả về bảng dự kiến với

ba cột, mà chỉ trả về hai cột ban đầu được xác định khi bảng đã được tạo ra Tình trạng này phát sinh vì dấu * được sử dụng trong định nghĩa hàm và được giải quyết trong thời gian tạo, chứ không phải trong thời gian thực hiện

Các hàm ngoài do người dùng định nghĩa

Sử dụng các hàm ngoài

Khả năng để tham khảo các chương trình ngoài như là các hàm giúp cho các câu lệnh SQL của bạn có các khả năng mạnh mẽ Bằng cách xây dựng các hàm bằng

Trang 37

các ngôn ngữ lập trình như C và ngôn ngữ Java, bạn có thể thực hiện rất nhiều nhiệm vụ cao cấp như xử lí chuỗi, mà có thể yêu cầu nhiều (và làm đảo lộn) các câu lệnh SQL trong một UDF SQL để lặp Bạn cũng có thể xử lý các nguồn dữ liệu bên ngoài hoặc thực hiện các hành động bên ngoài các cơ sở dữ liệu trong các ngôn ngữ lập trình này

Các hàm ngoài có thể được định nghĩa hoặc để chạy ở chế độ NOT FENCED có nghĩa là, bên trong nhân cơ sở dữ liệu hay chế độ FENCED có nghĩa là, trong

bộ nhớ bên ngoài nhân cơ sở dữ liệu Ưu điểm của việc sử dụng một hàm NOT FENCED là chia sẻ vùng nhớ với nhân cơ sở dữ liệu và có thể truyền thông với nó nhanh hơn Tuy nhiên, nếu một hàm NOT FENCED chưa được viết đúng cách, lỗi

bộ nhớ có thể xảy ra Nếu điều này xảy ra, lỗi bộ nhớ có thể bắt đầu ghi đè bộ nhớ

có liên kết với nhân DB2, mà nhân này có thể có ảnh hưởng khủng khiếp, ví dụ như loại bỏ DB2 Nếu bạn đang viết các hàm C hoặc C++, bạn nên viết chúng như

là các hàm FENCED và thử kiểm tra chúng rộng rãi trước khi quyết định để tái tạo chúng như là hàm NOT FENCED

Tạo các hàm bên ngoài

Liệt kê 19 cho thấy một sơ đồ cú pháp đơn giản để đăng ký một hàm ngoài:

Liệt kê 19 Sơ đồ cú pháp để đăng ký một hàm vô hướng ngoài

>>-CREATE

Ngày đăng: 07/08/2014, 09:23

HÌNH ẢNH LIÊN QUAN

Liệt kê 25. Sơ đồ cú pháp đã đơn giản hóa để đăng ký một thủ tục lưu sẵn bên  ngoài - Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 9: Các thường trình do người dùng định nghĩa doc
i ệt kê 25. Sơ đồ cú pháp đã đơn giản hóa để đăng ký một thủ tục lưu sẵn bên ngoài (Trang 60)
Hình 1. Giao diện DB2 Developer Workbench - Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 9: Các thường trình do người dùng định nghĩa doc
Hình 1. Giao diện DB2 Developer Workbench (Trang 76)
Hình 2. Trình thủ thuật thủ tục lưu sẵn SQL DWB - Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 9: Các thường trình do người dùng định nghĩa doc
Hình 2. Trình thủ thuật thủ tục lưu sẵn SQL DWB (Trang 78)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w