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

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

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 (390.42 KB, 80 trang )

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.


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.
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.


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:
 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
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

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

>>-CREATE FUNCTION function-name
>

> ( + + ) * >
| , |
| V | |
' parameter-name data-type1-+-'

> RETURNS +-data-type2 + * >

'-+-ROW + | column-list |-'
'-TABLE-'

LANGUAGE SQL
> + + * + + * >
'-SPECIFIC specific-name-'

NOT DETERMINISTIC EXTERNAL ACTION
> + + * + + * >
'-DETERMINISTIC ' '-NO EXTERNAL ACTION-'

READS SQL DATA
> + + * + + * >
+-CONTAINS SQL +
| |
'-MODIFIES SQL DATA '

> | SQL-function-body | >

column-list:

,
V |
| ( column-name data-type3-+ ) |

SQL-function-body:

| +-RETURN Statement + |
'-dynamic-compound-statement-'


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
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
SCALAR).
 SPECIFIC (Cụ thể): Bạn có thể gán cho hàm một tên cụ thể, chứ không
phải là DB2 gán một tên duy nhất do hệ thống tạo ra. Điều này rất có ích
nếu bạn sử dụng các hàm quá tải có nghĩa là, hàm có cùng tên nhưng có
một số các tham số khác nhau.
 DETERMINISTIC (Tất định): Chỉ rõ xem hàm có trả về cùng một kết quả
mỗi khi nó được thực hiện với cùng một bộ các tham số đầu vào hay không.
Các hàm tất định bao gồm các hàm toán học và các hàm không phụ thuộc
vào dữ liệu trong các bảng hoặc thay đổi các nguồn dữ liệu.
 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.
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ị

kiểu dữ liệu:

Liệt kê 2. Một hàm vô hướng đơn giản

CREATE FUNCTION tan (x DOUBLE)
RETURNS DOUBLE
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN SIN(x)/COS(x)

Một hàm hàng, như ví dụ được hiển thị trong Liệt kê 3, tách kiểu do người sử
dụng định nghĩa thành các thành phần khác nhau của nó:

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

CREATE FUNCTION fromperson (p person)
RETURNS ROW (name VARCHAR(10), firstname
VARCHAR(10))
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
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))
RETURNS TABLE (
empno CHAR(6),
lastname VARCHAR(15),
firstname VARCHAR(12),
deptname VARCHAR(36)
)
LANGUAGE SQL
READS SQL DATA
NO EXTERNAL ACTION
DETERMINISTIC
RETURN
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
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

CREATE FUNCTION joinData (x INT, y INT)

RETURNS DOUBLE
SPECIFIC join_int2
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN x + y

*******

CREATE FUNCTION joinData (x VARCHAR(10))
RETURNS VARCHAR(15)
SPECIFIC join_str
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN 'new_' || x

Lợi ích của việc cung cấp một tên SPECIFIC trở nên rõ ràng hơn khi bạn phải bảo
trì hàm, như thêm một lời ghi chú hoặc loại bỏ nó. Chỉ đơn giản sử dụng câu lệnh
DROP FUNCTION joinData sẽ chưa đủ trong trường hợp trên. DB2 sẽ không biết
hàm nào được bạn đề cập đến. Bạn sẽ cần phải tạo ra dấu hiệu hàm đầy đủ, như
DROP FUNCTION joinData(int, int), để chỉ rõ hàm joinData mà bạn dự định loại
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ố
đă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

CREATE FUNCTION joinData (x INT, y INT)
RETURNS DOUBLE
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN x + y




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

CREATE FUNCTION futureDate (x INT)
RETURNS DATE
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
NOT DETERMINISTIC
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
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.



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

>>-+ + BEGIN ATOMIC >
| (1) |
'-label: '

> + + >
| |
| V | |
' +-| SQL-variable-declaration |-+ ;-+-'
'-| condition-declaration | '

> + + END + + ><
| , | '-label-'
| V | |
' | SQL-routine-statement | ;-+-'

SQL-variable-declaration:

,
V |
| DECLARE SQL-variable-name-+ data-type
->


DEFAULT NULL
> + + |
'-DEFAULT default-values-'

condition-declaration:

| DECLARE condition-name CONDITION FOR
>

VALUE
SQLSTATE + +
> + + string-constant |

SQL-routine-statement:

| +-CALL + |
+-FOR +
+-+ + fullselect-+
| | , | |
| | V | | |
| '-WITH common-table-expression-+-' |
+-GET DIAGNOSTICS +
+-IF +
+-INSERT +
+-ITERATE +
+-LEAVE +
+-MERGE +
+-searched-delete +
+-searched-update +
+-SET Variable +

+-SIGNAL +
'-WHILE '


Bạn sẽ tìm hiểu về những phần chính của câu lệnh phức hợp trong các phần con
sau đây.
DECLARE
Khai báo (DECLARE) cho phép bạn khai báo các biến trong khối. Kiểu dữ liệu có
thể là bất kỳ kiểu nào do người dùng định nghĩa hoặc kiểu dữ liệu SQL chuẩn,
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ụ.



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

CREATE FUNCTION changeSal (v_sal DOUBLE)
RETURNS DOUBLE
LANGUAGE SQL
CONTAINS SQL
NO EXTERNAL ACTION
DETERMINISTIC
RETURN v_sal * 2

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

SELECT empno,
changeSal(salary) AS newSalary
FROM employee
WHERE edlevel > 19



Result from the DB2 sample database:

EMPNO NEWSALARY

000030 +1.96500000000000E+005

×