Tóm tắt: Từ các tri-gơ đến các cải tiến đối tượng, bài viết này trình diễn các tính năng tương thích Oracle mới trong DB2 9.7.
Lời kêu gọi tất cả các nhà phát triển! bạn có các kỹ năng cơ sở dữ liệu Oracle không? Bạn có muốn bạn có thể sử dụng lại kiến thức và mã PL/SQL của mình trên nền tảng cơ sở dữ liệu khác không?
IBM DB2 cho Linux, UNIX, và Windows (LUW) đã có một sự thay đổi dáng vẻ bên ngoài. Được dẫn dắt bởi các yêu cầu của khách hàng hiện tại và tương lai cho các cải tiến tiết kiệm chi phí, nên bản phát hành mới nhất, DB2 9.7, chứa đựng một loạt công nghệ mới trong các lĩnh vực quen thuộc như tự trị (tự quản lý) và Nén sâu (xem "DB2 9.7: về vấn đề này). Tuy nhiên, điều đáng nói là một bộ sưu tập các khả năng tập trung vào khả năng tương thích SQL. Những tính năng này làm cho DB2 dễ dàng được chấp nhận là phần mềm cơ sở dữ liệu của bạn để cho bạn có thể lợi dụng các đặc tính tiết kiệm chi phí và hiệu năng cao của nó, ngay cả khi hiện nay bạn đang quen thuộc với các cơ sở dữ liệu cạnh tranh khác.
Trong bài viết này tôi sẽ cho thấy các ví dụ về một số các tính năng tương thích SQL mới trong DB2 9.7. Chúng ta sẽ bắt đầu với các tri-gơ và các kiểu dữ liệu mới, rồi chuyển sang sự hỗ trợ cho Oracle SQL và PL/SQL, và kết thúc bằng một cuộc thảo luận về cải tiến đối tượng và tương tranh. Có một thứ gì đó cho tất cả mọi người khi DB2 "trở nên tương thích".
Để bắt đầu, hãy kết nối với cửa sổ CLP Plus (Command Line Processor Plus – Bộ xử lý dòng lệnh +) (xem Hình 1), thay thế "db2admin" bằng tài khoản đăng nhập đã chọn của bạn:
clpplus db2admin@localhost:50000/sample
Tương thích SQL
Bước đầu tiên trong việc sử dụng các tính năng tương thích SQL trong DB2 9.7 là cho phép tham số DB2_COMPATIBILITY_VECTOR. Việc thiết lập db2set DB2_COMPATIBILITY_VECTOR=ORA cho phép các tính năng tương thích SQL liên quan đến Oracle đối với tất cả cơ sở dữ liệu được tạo ra tiếp sau đó. Để giải thích một số trong các tham số quan trọng nhất được DB2_COMPATIBILITY_ VECTOR sử dụng, hãy xem Bảng 1.
Để cho phép tính năng này, bạn phải có các quyền quản trị. Hãy nhập các lệnh sau tại cửa sổ lệnh DB2:
db2set DB2_COMPATIBILITY_VECTOR=ORA
db2stop
db2start
Để tạo một cơ sở dữ liệu đơn giản, hãy nhập: db2 create database [dbname]. Sau đó, bạn có thể kết nối với cơ sở dữ liệu này bằng cách nhập:
db2 connect to [dbname];
Bước tiếp theo là tạo các bảng bằng cách sử dụng các kiểu dữ liệu Oracle. Nhập vào câu lệnh CREATE TABLE sau đây bằng cách sử dụng hoặc cửa sổ CLP Plus vào hoặc IBM Data Studio:
Create table employee (EMPNO NUMBER(5), ENAME VARCHAR2(50), DEPTNO NUMBER(5))
Hình 1: Trong DB2 9.7, giao diện CLP Plus cho phép bạn thử các tính năng tương thích SQL. Các tính năng PL/SQL
Bây giờ chúng ta sẽ khám phá những tính năng cho phép bạn tạo ra các thủ tục PL/SQL. DB2 9.7 hỗ trợ như sau:
- Các gói do người dùng định nghĩa
- Các thủ tục/các hàm/các khối ẩn danh trong PL/SQL
- Các gói dựng sẵn (DBMS_OUT.PUT_LINE, DBMS_PIPE, DBMS_UTL, và v.v..)
- Các mảng kết hợp (INDEX BY)
- Varrays
- Triggers (Các tri-gơ)
- %ROWTYPE
- %TYPE
- EXCEPTIONS (Các trường hợp ngoại lệ)
- Ref-Cursors (Các con trỏ-tham chiếu)
Lưu ý rằng sự hỗ trợ PL/SQL chỉ có sẵn trong Enterprise Server Edition và Workgroup Edition (Ấn bản máy chủ doanh nghiệp và ấn bản Nhóm làm việc) của DB2 9.7 cho LUW. PL/SQL không được hỗ trợ trong DB2 Express-C, DB2 Express, hoặc DB2 Personal Edition (Ấn bản cá nhân của DB2).
Các thủ tục PL/SQL trong DB2
DB2 hỗ trợ nhiều ngôn ngữ PL/SQL. Chúng ta hãy xem cách các thủ tục này làm việc với một số mã mẫu. Một khi được biên dịch và được thực hiện, thủ tục PL/SQL sẽ hiển thị một thông báo chào mừng cho người dùng. Để xem kết quả đầu ra trên bàn điều khiển, trước tiên hãy ban hành lệnh SET SERVEROUTPUT ON.
CREATE OR REPLACE PROCEDURE message_proc (myname varchar2)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Welcome to DB2 9.7 ( )! ' || myname
|| '. Now supports for ORACLE SQL and PL /SQL as well :-)!');
END message_proc;
Để gọi thủ tục PL/SQL này trong DB2, ban hành các lệnh sau đây:
EXEC proc_name
EXEC message_proc('Anil');
Dưới đây là một ví dụ sử dụng một vòng lặp FOR:
BEGIN
FOR a IN 10 .. 20 LOOP
DBMS_OUTPUT.PUT_LINE('Counter ' || a);
END LOOP;
END;
Vòng lặp này sẽ tạo ra kết quả đầu ra sau đây:
Counter 10
Counter 20
Lệnh cắt ngắn bảng
Một số trong các bạn quen nền tảng cơ sở dữ liệu Oracle nhiều khả năng đã sử dụng lệnh TRUNCATE TABLE (cắt ngắn bảng) ở đâu đó trong sự nghiệp của mình. Bây giờ DB2 cũng hỗ trợ lệnh này. Các mã sau đây tạo ra một bảng đơn giản, thêm các hàng vào nó, và sau đó sử dụng lệnh TRUNCATE để loại bỏ tất cả các hàng khỏi bảng này:
CREATE TABLE CLIENTS
(CLIENTID NUMBER(5) PRIMARY KEY NOT NULL,CLIENTNAME
VARCHAR2(50));
Chèn một vài hàng vào:
INSERT INTO CLIENTS (CLIENTID, CLIENTNAME) VALUES (1,'IBM');
INSERT INTO CLIENTS VALUES (2,'MSFT');
INSERT INTO CLIENTS VALUES (3,'EDB');
Bảng 1: Các giá trị DB2_COMPATIBILITY_VECTOR Chúng ta hãy nhìn vào các hàng:
SELECT * FROM CLIENTS;
Bây giờ ban hành lệnh sau để cắt các hàng này:
TRUNCATE TABLE CLIENTS;
Hãy chứng tỏ rằng chúng đã thực hiện xong:
SELECT * FROM CLIENTS;
Bạn sẽ không có hàng nào được hiển thị.
Các cải tiến đối tượng và tương tranh
Tôi muốn kết thúc bằng cách nhắc đến hai cải tiến quan trọng với DB2 9.7 có thể tiết kiệm thời gian cho bạn và tăng hiệu năng: xác nhận hợp lệ sử dụng lần đầu, và một trạng thái khóa mặc định mới.
Xác nhận hợp lệ sử dụng lần đầu
Bất cứ khi nào các đối tượng cơ sở dữ liệu cơ bản (các bảng, các khung nhìn, các thủ tục, các hàm, và v.v..) bị thay đổi, lần sau khi một đối tượng được lấy ra với các đối tượng phụ thuộc của nó, nó sẽ được tự động xác nhận hợp lệ lại. Điều này chắc chắn sẽ tiết kiệm thời gian cho các nhà phát triển ứng dụng. Việc kiểm tra phụ thuộc tự động được thực hiện bất cứ khi nào một đối tượng bị thay đổi.
Đọc dữ liệu đã giao kết hiện tại (mặc định trong DB2)
Trong phiên bản trước của DB2, đã không có khả năng xảy ra việc một người dùng cố gắng đọc và một người dùng cố gắng viết lên cùng một hàng trong cùng một lúc. Điều này dựa trên nguyên tắc rằng người đọc chờ kết quả viết sắp xảy ra. Hiện nay DB2 9.7 sử dụng trạng thái khóa-mặc định để cho người đọc sẽ không phải chờ kết quả viết sắp xảy ra. Thay vào đó, họ sẽ đọc phiên bản hiện tại đã giao kết của hàng. Do đó, những người đọc không chặn những người viết nữa và những người viết cũng không chặn những người đọc.
Tôi rất ấn tượng bởi những tính năng tương thích SQL mới này. Tôi mới chỉ có thể bàn sơ qua trong bài viết này Vì vậy, tôi khuyến khích bạn thử với DB2 9.7. Bạn sẽ không phải thất vọng!
Tài nguyên