intTypePromotion=3

Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 2: Thao tác dữ liệu DB2

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:43

0
64
lượt xem
4
download

Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 2: Thao tác dữ liệu DB2

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tìm hiểu các khái niệm cơ bản Sunil Sabat, Giám đốc liên minh kỹ thuật, IBM Tóm tắt: Tìm hiểu về các khái niệm cơ bản của việc thao tác dữ liệu trong cơ sở dữ liệu DB2®. Đây là Phần 2 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 lấy chứng chỉ Phát triển ứng dụng DB2 9 (kỳ thi 733). Trước khi bạn bắt đầu Hướng dẫn này gồm những gì? ...

Chủ đề:
Lưu

Nội dung Text: Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 2: Thao tác dữ liệu DB2

  1. Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 2: Thao tác dữ liệu DB2 Tìm hiểu các khái niệm cơ bản Sunil Sabat, Giám đốc liên minh kỹ thuật, IBM Tóm tắt: Tìm hiểu về các khái niệm cơ bản của việc thao tác dữ liệu trong cơ sở dữ liệu DB2®. Đây là Phần 2 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 lấy chứng chỉ Phát triển ứng dụng DB2 9 (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 trình bày các khái niệm cơ bản về thao tác dữ liệu trong các cơ sở dữ liệu DB2, bao gồm các chủ đề sau: Thay đổi dữ liệu (chèn, cập nhật, xóa).  Truy vấn một cơ sở dữ liệu xuyên nhiều bảng hoặc nhiều khung nhìn.  Sử dụng các bảng truy vấn được vật chất hóa (các MQT - materialized  query tables). Sử dụng các hàm SQL DB2 và các thủ tục được lưu sẵn.  Sử dụng các biểu thức bảng chung.  Xác định khi nào sử dụng các con trỏ (cursor) trong một chương trình SQL. 
  2. Nhận biết các kiểu con trỏ (chỉ đọc, có thể cập nhật được, có thể cuộn  được). Nhận biết các phạm vi của các con trỏ.  Thao tác các con trỏ.  Khả năng thao tác các đối tượng lớn (LOBs) (như CLOB [Character Large  Objects - các đối tượng lớn ký tự] và BLOB [Binary Large Object - các đối tượng lớn nhị phân]). Quản lý một đơn vị công việc (ví dụ, một giao dịch)  Đây là hướng dẫn thứ hai trong một loạt bài viết gồm bảy 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.1 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 2 của bài thi, mang tên "Thao tác dữ liệu". 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 các phần tải về DB2 Express-C (DB2 Express-C downloads page). Ai cầ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.1, bạn đã phải vượt qua được kỳ thi căn bản về họ DB2 9.1 (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) (xem phần Tài
  3. nguyên) để chuẩn bị cho kỳ thi đó. Đây là một loạt hướng dẫn rất phổ biến đã giúp cho nhiều người hiểu về các khái niệm căn bản về họ các sản phẩm 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 nhiều thông tin hơn. Phát triển ứng dụng liên quan đến việc lấy ra và thao tác dữ liệu. Trong DB2, các quy trình ấy bao gồm một số các phương pháp. Mặc dù các phương pháp này có thể được lập trình theo các ngôn ngữ khác nhau, các khái niệm vẫn như vậy bất kể ngôn ngữ triển khai thực hiện là gì. Hướng dẫn này là bước đầu tiên mà bạn nên tìm hiểu trước khi bắt đầu lập trình ứng dụng với DB2 Thay đổi và truy cập dữ liệu Thay đổi dữ liệu Thay đổi dữ liệu là một quá trình then chốt cần hiểu khi thiết kế một ứng dụng cơ sở dữ liệu. Nó phụ thuộc vào một vài yếu tố: Mô hình dữ liệu và siêu dữ liệu (Dữ liệu danh mục, các kiểu, các giới hạn là  gì và kiểm tra xem bạn có phải đối phó với chúng không?). Các yêu cầu nghiệp vụ (Bạn cần tìm ra và sửa đổi dữ liệu trong cơ sở dữ  liệu như thế nào?). Quyền truy cập và đảm bảo an ninh tại mức người dùng, mức bảng và mức  cột (Có cho phép một sự thay đổi đặc biệt không?).
  4. Các giao diện để truy cập dữ liệu (Bạn giao tiếp với dữ liệu thay đổi nh ư  thế nào?). Bạn nên sử dụng các khả năng DB2 nào trong việc thiết kế một ứng dụng? Người sử dụng không thể sửa đổi dữ liệu danh mục hệ thống. Các bảng danh mục và các khung nhìn lưu trữ siêu dữ liệu về định nghĩa vật lý và logic của dữ liệu. Lược đồ SYSIBM sở hữu các bảng, trong khi các khung nhìn với các bảng này thuộc sở hữu của lược đồ SYSCAT. Bạn có thể truy vấn danh mục để nhận được các thông tin có ích. Để thực hiện các sự lựa chọn thích hợp, bạn cần phải xem xét cả hai, thiết kế cơ sở dữ liệu và các môi trường đích cho các ứng dụng của bạn. Ví dụ, bạn có thể chọn để áp đặt một số các quy tắc nghiệp vụ trong việc thiết kế c ơ sở dữ liệu của bạn thay cho việc đưa vào trong logic ứng dụng của bạn. Các khả năng mà bạn sử dụng và phạm vi mà bạn sử dụng chúng có thể biến đổi rất nhiều. Các khả năng mà bạn cần phải xem xét bao gồm: Truy cập dữ liệu bằng cách sử dụng:  SQL nhúng, bao gồm cả SQL nhúng cho Java (SQLJ). o DB2 CLI (DB2 Call Level Interface - Giao diện mức lời gọi của o DB2), ODBC (Open Database Connectivity – Kết nối cơ sở dữ liệu mở) và JDBC. Các đặc tả kỹ thuật của Microsoft. o DBI Perl. o Các sản phẩm truy vấn. o Kiểm soát các giá trị dữ liệu bằng cách sử dụng:  Các kiểu dữ liệu (làm sẵn hoặc do người dùng định nghĩa). o
  5. Các ràng buộc kiểm tra bảng. o Các ràng buộc toàn vẹn tham chiếu. o Các khung nhìn có sử dụng CHECK OPTION (tùy chọn kiểm tra). o Logic ứng dụng và các kiểu biến. o Kiểm soát mối quan hệ giữa các giá trị dữ liệu bằng cách sử dụng:  Các ràng buộc toàn vẹn tham chiếu. o Các bộ bẫy sự kiện (Trigger). o Logic ứng dụng. o Thi hành các chương trình tại máy chủ bằng cách sử dụng:  Các thủ tục được lưu sẵn. o Các hàm do người sử dụng định nghĩa o Các bộ bẫy sự kiện (Trigger). o Lợi thế chủ yếu trong việc chuyển giao logic tập trung vào dữ liệu từ ứng dụng sang cơ sở dữ liệu là ứng dụng của bạn trở nên độc lập hơn về dữ liệu. Logic xung quanh dữ liệu của bạn được tập trung vào một nơi, đó là cơ sở dữ liệu. Điều này có nghĩa là bạn có thể thay đổi dữ liệu hoặc logic dữ liệu một lần và có ảnh hưởng ngay lập tức đến tất cả các ứng dụng phụ thuộc vào dữ liệu đó. Lợi thế cuối cùng này rất mạnh, nhưng bạn cũng phải xem xét đến việc bất kỳ logic dữ liệu nào đặt vào cơ sở dữ liệu cũng có ảnh hưởng đến tất cả những người sử dụng dữ liệu như nhau. Bạn phải xem xét xem các quy tắc và các ràng buộc mà
  6. bạn muốn áp đặt đối với dữ liệu có áp dụng cho tất cả những ng ười sử dụng dữ liệu hay chỉ những người dùng của một ứng dụng riêng lẻ nào đó hay không. Các yêu cầu ứng dụng của bạn cũng có thể giúp bạn quyết định xem có áp đặt các quy tắc tại cơ sở dữ liệu hay tại ứng dụng không. Ví dụ, bạn có thể cần xử lý các lỗi xác nhận hợp lệ về việc nhập dữ liệu vào theo trình tự cụ thể. Nói chung, bạn nên thực hiện kiểu xác nhận hợp lệ dữ liệu này trong mã ứng dụng. Bạn cũng nên xem xét môi trường tính toán tại nơi ứng dụng được sử dụng. Bạn cần phải xem xét sự khác biệt giữa thi hành logic trên các máy khách và thi hành logic trên máy chủ cơ sở dữ liệu (thường là mạnh hơn) khi sử dụng hoặc các thủ tục được lưu sẵn, các hàm do người dùng định nghĩa (UDFs) hoặc kết hợp cả hai. Trong một số trường hợp, cách tiếp cận đúng đắn là bao gồm cả sự thi hành logic trong ứng dụng (có lẽ tùy theo các yêu cầu ứng dụng cụ thể) lẫn thi hành logic trong cơ sở dữ liệu (có lẽ tùy thuộc vào những cách sử dụng tương tác khác bên ngoài ứng dụng). Truy cập dữ liệu Trong một cơ sở dữ liệu quan hệ, bạn cần phải sử dụng SQL để truy cập dữ liệu mong muốn của bạn. Tuy nhiên, bạn có một sự lựa chọn cách tích hợp SQL đó vào ứng dụng của bạn như thế nào. Bạn có thể chọn trong số các giao diện và các ngôn ngữ được hỗ trợ sau đây: SQL nhúng  C/C++  COBOL 
  7. FORTRAN  Ngôn ngữ Java® (thông qua SQLJ hoặc JDBC)  REXX  DB2 CLI và ODBC  Các đặc tả kỹ thuật của Microsoft, bao gồm cả ADO.NET và OLE DB  Các ngôn ngữ Visual Basic, Visual C++ và .NET  Perl DBI  Perl  PHP  Các sản phẩm truy vấn như Lotus Approach (Cách tiếp cận Lotus), IBM  Query Management Facility (Tiện ích quản lý truy vấn của IBM), Microsoft Access hoặc Microsoft Excel Chương trình của bạn phải thiết lập một kết nối tới máy chủ cơ sở dữ liệu đích trước khi nó có thể chạy bất kỳ các câu lệnh SQL thực thi nào. Kết nối này nhận biết cả mã nhận dạng (ID) quyền hạn của người sử dụng đang chạy chương trình và cả tên của máy chủ cơ sở dữ liệu mà chương trình được chạy trên đó. Nói chung, tiến trình của ứng dụng của bạn chỉ có thể kết nối với một máy chủ cơ sở dữ liệu ở một thời điểm. Máy chủ này được gọi là máy chủ hiện tại. Tuy nhiên, ứng dụng của bạn có thể kết nối đến nhiều máy chủ cơ sở dữ liệu trong một môi trường cập nhật nhiều máy chủ. Trong trường hợp này, chỉ có một máy chủ có thể là máy chủ hiện tại.
  8. Chương trình của bạn có thể thiết lập một kết nối tới một máy chủ cơ sở dữ liệu hoặc tường minh bằng cách sử dụng một câu lệnh kết nối, hoặc không tường minh, bằng cách kết nối với máy chủ cơ sở dữ liệu mặc định. Các ứng dụng Java cũng có thể thiết lập một kết nối thông qua một cá thể kết nối (Connection). Truy vấn một cơ sở dữ liệu xuyên qua nhiều bảng Bạn có thể truy vấn dữ liệu từ một hoặc nhiều bảng khi sử dụng một câu lệnh SELECT. Bạn cần có quyền hạn thích hợp để truy cập dữ liệu mà bạn truy vấn. Dữ liệu được trả về được biết đến như một tập kết quả. Một câu lệnh SELECT chỉ rõ các tiêu chí cho dữ liệu mà tập kết quả phải tìm nạp dữ liệu đó. Nó không chỉ rõ cách thức trong đó DB2 trả về kết quả như thế nào. Trình tối ưu hóa DB2 đưa ra quyết định sau cùng bằng cách xây dựng một kế hoạch truy cập dựa vào các thống kê cơ sở dữ liệu hiện tại từ các bảng danh mục hệ thống và các kiểu kế hoạch mà nó đã được chỉ thị phải xem xét. Bây giờ hãy xem một số câu lệnh SELECT mẫu. Câu lệnh dưới đây chọn tất cả các tên cửa hàng và các tên sản phẩm từ các bảng cửa hàng và bảng sản phẩm: SELECT A.STORE_NAME, B.PRODUCT_NAME FROM STORE A, PRODUCT B Store_name (tên cửa hàng) là một cột trong bảng có tên là cửa hàng (store). Product_name (tên sản phẩm) là một cột trong bảng có tên là sản phẩm (product).
  9. Bây giờ xem một ví dụ khác. Trong bảng employee (nhân viên), bạn chọn số hiệu của phòng ban (WORKDEPT) và tiền lương tối đa của phòng ban (SALARY) đối với tất cả các phòng ban có tiền lương tối đa thấp hơn tiền lương trung bình trong tất cả các phòng ban khác: SELECT WORKDEPT, MAX(SALARY) FROM EMPLOYEE EMP_COR GROUP BY WORKDEPT HAVING MAX(SALARY) < (SELECT AVG(SALARY) FROM EMPLOYEE WHERE NOT WORKDEPT = EMP_COR.WORKDEPT) Làm việc với các bảng truy vấn được vật chất hóa (MQT) Định nghĩa của một MQT là dựa trên kết quả của một truy vấn. Các MQT có thể cải thiện đáng kể hiệu năng của các truy vấn. Hướng dẫn này giới thiệu cho bạn về các MQT, các bảng tóm tắt và các bảng dựng tạm và chỉ ra cho bạn, qua các ví dụ làm việc, làm thế nào để xây dựng và chạy với các bảng truy vấn được vật chất hóa.
  10. Một MQT là một bảng mà định nghĩa của nó dựa trên kết quả của một truy vấn. Dữ liệu được chứa trong một MQT là bắt nguồn từ một hoặc nhiều bảng được nêu trong định nghĩa MQT. Các bảng tó m tắt (hoặc các bảng tóm tắt tự động [ASTs]), đã quen thuộc với những người sử dụng DB2 IBM cho Linux, UNIX và Windows, được coi là một kiểu MQT chuyên biệt. Câu lệnh fullselect, một phần của định nghĩa một bảng tóm tắt, chứa một mệnh đề GROUP BY tóm tắt dữ liệu từ các bảng được tham chiếu trong fullselect. Bạn có thể coi một MQT như là một loại khung nhìn được vật chất hóa. Cả các khung nhìn lẫn các MQT được định nghĩa trên cơ sở một truy vấn. Truy vấn trên đó một khung nhìn được định nghĩa sẽ chạy bất cứ khi nào khung nhìn được tham chiếu. Tuy nhiên, một MQT thực tế lưu trữ các kết quả truy vấn như là dữ liệu và bạn có thể làm việc với các dữ liệu có trong MQT thay cho dữ liệu có trong các bảng bên dưới. Các MQT có thể cải thiện đáng kể hiệu năng của các truy vấn, đặc biệt là các truy vấn phức tạp. Nếu trình tối ưu hóa xác định rằng một truy vấn hay một phần của một truy vấn có thể được giải quyết bằng cách sử dụng một MQT, truy vấn có thể được viết lại để tận dụng lợi ích của MQT. Vào lúc tạo bảng, một MQT có thể được định nghĩa là được duy trì bởi hệ thống hay là được duy trì bởi người sử dụng. Dữ liệu trong kiểu bảng truy vấn được vật chất hóa này được duy trì bởi hệ thống. Khi bạn tạo ra kiểu MQT này, bạn có thể xác định xem dữ liệu của bảng là REFRESH IMMEDIATE hay REFRESH DEFERRED. Từ khóa REFRESH (làm mới) cho phép bạn chỉ rõ dữ liệu sẽ được duy trì như thế nào. DEFERRED có nghĩa là dữ liệu trong bảng có thể được làm mới vào bất kỳ lúc nào khi sử dụng câu lệnh REFRESH TABLE. Các MQT được duy trì bởi hệ thống, cả REFRESH DEFERRED lẫn REFRESH IMMEDIATE đều không cho phép các hoạt động chèn, cập nhật hoặc xóa được thực hiện đối với chúng. Tuy nhiên, các MQT được duy trì bởi hệ thống với chế độ REFRESH IMMEDIATE được cập nhật ngay theo
  11. các thay đổi đã thực hiện cho các bảng bên dưới như là một kết quả của các phép chèn, cập nhật hoặc xóa. Phần sau chỉ ra một ví dụ tạo ra một MQT được duy trì bởi hệ thống với REFRESH IMMEDIATE. Bảng đó có tên là EMP, được dựa trên các bảng bên dưới là EMPLOYEE và DEPARTMENT trong cơ sở dữ liệu SAMPLE. Vì các MQT làm mới ngay lập tức (REFRESH IMMEDIATE) yêu cầu ít nhất một khoá duy nhất từ mỗi bảng được tham chiếu, xuất hiện trong danh sách lựa chọn của truy vấn, trước hết bạn định nghĩa một ràng buộc duy nhất trên cột EMPNO trong bảng EMPLOYEE và trên cột DEPTNO trong bảng DEPARTMENT. Mệnh đề DATA INITIALLY DEFERRED đơn giản có nghĩa là dữ liệu không được chèn vào trong bảng như là một phần của câu lệnh CREATE TABLE. Sau khi được tạo ra, MQT ở trạng thái đang chờ kiểm tra và không thể được truy vấn cho đến khi câu lệnh SET INTEGRITY được thi hành đối với nó. Mệnh đề IMMEDIATE CHECKED chỉ rõ rằng dữ liệu sẽ được kiểm tra so với truy vấn định nghĩa của MQT và được làm mới. Mệnh đề NOT INCREMENTAL chỉ rõ rằng việc kiểm tra tính toàn vẹn được thực hiện trên toàn bộ bảng. CONNECT TO SAMPLE ... ALTER TABLE EMPLOYEE ADD UNIQUE (EMPNO) ALTER TABLE DEPARTMENT ADD UNIQUE (DEPTNO) CREATE TABLE EMP AS (SELECT E.EMPNO, E.FIRSTNME, E.LASTNAME, E.PHONENO, D.DEPTNO,
  12. SUBSTR(D.DEPTNAME, 1, 12) AS DEPARTMENT, D.MGRNO FROM EMPLOYEE E, DEPARTMENT D WHERE E.WORKDEPT = D.DEPTNO) DATA INITIALLY DEFERRED REFRESH IMMEDIATE SET INTEGRITY FOR EMP IMMEDIATE CHECKED NOT INCREMENTAL Các hàm và các biểu thức Các hàm SQL DB2 là gì? Một hàm cơ sở dữ liệu là một mối quan hệ giữa một tập hợp các giá trị dữ liệu đầu vào và một tập hợp các giá trị kết quả. Có hai loại hàm: được cài đặt sẵn và do người sử dụng định nghĩa. Hàm SQL được cài đặt sẵn được cung cấp cùng với trình quản lý  (manager) cơ sở dữ liệu. Chúng cung cấp một giá trị kết quả đơn lẻ và được nhận biết như là một phần của lược đồ SYSIBM. Ví dụ về hàm SQL được cài đặt sẵn bao gồm các hàm cột như AVG, các hàm toán tử như +, các hàm tạo khuôn mẫu như DECIMAL và các hàm khác, chẳng hạn như SUBSTR. Các hàm do người sử dụng định nghĩa (UDFs) là các hàm được đăng ký  vào một cơ sở dữ liệu trong SYSCAT.FUNCTIONS (khi sử dụng câu lệnh CREATE FUNCTION). Các UDF không bao giờ là một phần của lược đồ
  13. SYSIBM. Một tập hợp các hàm như vậy được cung cấp cùng với trình quản lý cơ sở dữ liệu trong một lược đồ có tên là SYSFUN. DB2 cho phép những người dùng và các nhà phát triển ứng dụng mở rộng các chức năng của hệ thống cơ sở dữ liệu bằng cách áp dụng các định nghĩa hàm riêng của họ trong chính máy cơ sở dữ liệu. Các ứng dụng dựa trên các UDF thực hiện tốt hơn các ứng dụng có lấy ra các hàng từ cơ sở dữ liệu và áp dụng các hàm đó trên dữ liệu được lấy ra. Việc mở rộng các hàm cơ sở dữ liệu cũng cho phép cơ sở dữ liệu lợi dụng cùng các hàm trong máy mà một ứng dụng sử dụng, cung cấp thêm sự hiệp lực giữa ứng dụng và cơ sở dữ liệu. Việc sử dụng các hàm góp phần vào nâng cao năng suất cho các nhà phát triển ứng dụng vì nó có tính hướng đối tượng hơn. Ví dụ, bạn có thể lưu trữ giá cho một sản phẩm bằng đô la Mỹ, nhưng bạn có thể muốn có một ứng dụng cụ thể trích dẫn giá cả theo Bảng Anh. Bạn có thể sử dụng một hàm để thực hiện điều này: SELECT UNIT_PRICE, CURRENCY('UK',UNIT_PRICE) FROM PRODUCT WHERE PRODUCT_ID = ? Các chế độ FENCED và NOT-FENCED Bạn có thể tạo các hàm trong C/C++, ngôn ngữ Java, hoặc OLE. Một hàm có thể chạy trong các chế độ FENCED (bảo vệ) hay NOT-FENCED (không được bảo vệ). Bạn nên phát triển một hàm trong chế độ FENCED trước khi chuyển sang chế độ NOT-FENCED. Một quá trình NOT-FENCED sẽ nhanh hơn, vì nó sử dụng bộ
  14. nhớ tác nhân (agent) DB2, trong khi một quá trình FENCED chạy bên trong chính quá trình db2udf riêng của nó. Một quá trình FENCED sử dụng bộ nhớ chia sẻ chung để giao tiếp với tác nhân gọi. Các hàm FENCED được lưu trữ trong sqllib/function còn các hàm không được bảo vệ được lưu trữ trong sqllib/unfenced. Các hàm SQL được DB2 cung cấp Hãy xem các ví dụ về một vài hàm SQL. Ví dụ đầu tiên lựa chọn tiêu đề và giá của tất cả các cuốn sách trong một bảng. Nếu giá của một tiêu đề sách là NULL, nó sẽ được hiển thị là 0.00. SELECT TITLE, COALESCE(PRICE, 0.00) AS PRICE FROM TITLES; Tiếp theo, bạn sẽ thấy một ví dụ có trả về một tên công ty và số lượng các ký tự có trong tên của công ty: SELECT COMPANYNAME, LENGTH(COMPANYNAME) FROM CUSTOMERS
  15. Bây giờ hãy xem làm thế nào để bạn có thể trả về năm ký tự ở tận cùng bên phải của tên của mỗi tác giả: SELECT RIGHT(AU_FNAME, 5) FROM AUTHORS Ví dụ tiếp theo này, khi sử dụng bảng project, thiết lập biến chủ AVERAGE (decimal(5,2)) là mức trung bình của số nhân viên (PRSTAFF) của các dự án trong phòng ban (DEPTNO) tên là D11. SELECT AVG(PRSTAFF) INTO :AVERAGE FROM PROJECT WHERE DEPTNO = 'D11' Có rất nhiều các hàm SQL khác được định nghĩa trong sổ tay tham khảo SQL DB2. Bạn luôn có thể viết hàm SQL riêng của bạn nếu DB2 không cung cấp một hàm như thế.
  16. Sử dụng các biểu thức bảng chung Một biểu thức bảng chung là một bảng tạm thời tại chỗ có thể được tham chiếu nhiều lần trong một câu lệnh SQL. Bảng tạm thời này chỉ tồn tại trong khoảng thời gian của câu lệnh SQL định nghĩa nó. Mỗi lần bảng chung được tham chiếu, các kết quả là như nhau. Một bảng tạm thời được định nghĩa trong một câu lệnh SQL sử dụng mệnh đề WITH. Đây là cú pháp: WITH AS ( ), AS (
  17. (SELECT -1 AS PRODUCT_ID, SUM(QUANTITY) AS TOTAL) SELECT PRODUCT_ID, QUANTITY FROM PROD_QUANTITY UNION SELECT PRODUCT_ID, TOTALS FROM TOTALS ORDER BY 1 DESC Trong ví dụ trên, prod_quantity được định nghĩa như là một biểu thức bảng chung. Nó được sử dụng cùng với một biểu thức bảng chung được gọi là totals. Câu lệnh SELECT cuối cùng chọn từ cả hai biểu thức bảng chung. Bây giờ hãy xem một ví dụ khác: WITH PAYLEVEL AS (SELECT EMPNO, EDLEVEL, YEAR(HIREDATE) AS HIREYEAR, SALARY+BONUS+COMM AS TOTAL_PAY
  18. FROM EMPLOYEE WHERE EDLEVEL > 16), PAYBYED (EDUC_LEVEL, YEAR_OF_HIRE, AVG_TOTAL_PAY) AS (SELECT EDLEVEL, HIREYEAR, AVG(TOTAL_PAY) FROM PAYLEVEL GROUP BY EDLEVEL, HIREYEAR) SELECT EMPNO, EDLEVEL, YEAR_OF_HIRE, TOTAL_PAY, DECIMAL(AVG_TOTAL_PAY,7,2) FROM PAYLEVEL, PAYBYED WHERE EDLEVEL = EDUC_LEVEL AND HIREYEAR= YEAR_OF_HIRE AND TOTAL_PAY < AVG_TOTAL_PAY Biểu thức bảng chung này cũng bao gồm PAYLEVEL. Bảng kết quả này bao gồm một số hiệu nhân viên, năm mà người đó đã được thuê, tổng số tiền lương phải trả cho nhân viên đó và trình độ học vấn của anh ta hay chị ta. Chỉ có các hàng dành cho các nhân viên có một trình độ học vấn cao hơn 16 được đưa vào kết quả.
  19. Danh sách cũng bao gồm một biểu thức bảng chung có tên là PAYBYED (viết tắt của "-tiền lương theo trình độ học vấn"). Nó sử dụng bảng PAYLEVEL để xác định trình độ học vấn, năm thuê và tiền lương trung bình trung bình của nhân viên được thuê trong cùng một năm và có trình độ học vấn như nhau. Các cột được bảng này trả về đã được gán các tên khác (ví dụ EDUC_LEVEL) với các tên cột được sử dụng trong danh sách chọn. Cuối cùng, bạn đi tới truy vấn thật sự để tạo ra kết quả mong muốn. Hai bảng (PAYLEVEL, PAYBYED) được nối để xác định những cá nhân có một mức lương thấp hơn tiền lương trung bình phải trả cho những người được thuê trong cùng một năm. Lưu ý rằng PAYBYED được dựa trên PAYLEVEL, do đó PAYLEVEL được truy vấn hai lần một cách hiệu quả trong câu lệnh đầy đủ. Cả hai lần cùng một tập hợp các hàng như nhau được sử dụng trong việc tính toán truy vấn. Sau khi bạn định nghĩa một biểu thức bảng chung, bạn có thể sử dụng nó trong một câu lệnh SQL như bạn làm đối với bất kỳ bảng nào khác. Bạn có thể sử dụng một biểu thức bảng chung nhiều lần như bạn muốn. Bạn thậm chí có thể tạo ra một một biểu thức bảng chung dựa vào một biểu thức bảng chung được tạo ra trước đó. Khi nào sử dụng các con trỏ (cursors) trong một chương trình SQL Con trỏ là gì? Khi nào bạn cần nó? Một con trỏ (cursor) là một cơ cấu được sử dụng để thao tác các tập hợp câu trả lời nhiều hàng từ một truy vấn DB2. Có hai tình huống mà bạn cần có một con trỏ: Khi một truy vấn trả về nhiều hơn một hàng.  Một câu lệnh SELECT với một mệnh đề INTO là rất đơn giản để viết mã, nhưng
  20. chỉ cho phép trả về có một hàng. Không có mệnh đề nào trong một câu lệnh SELECT cho phép xử lý trực tiếp được nhiều hàng, do đó, phải sử dụng một con trỏ. Khi bạn muốn cập nhật hoặc xóa một hoặc nhiều hàng, nhưng trước tiên  cần phải kiểm tra các nội dung của chúng. Cách đơn giản nhất để cập nhật hoặc xóa các hàng là sử dụng một câu lệnh như sau: UPDATE staff SET salary = salary * 1.10 WHERE id = 100 hoặc DELETE FROM staff WHERE id = 100 Tuy nhiên, các câu lệnh này, được gọi là các cập nhật hoặc xóa tìm kiếm không cho phép chương trình kiểm tra các nội dung của các hàng trước khi cập nhật hoặc xóa. Để thay thế bạn có thể sử dụng một con trỏ liên hợp với một cập nhật hoặc xóa được định vị Cách làm này cũng được biết đến như là "Update Where Current Of - Cập nhật khi đang ở đấy" và "Delete Where Current Of – Xóa khi đang ở đấy" trong đó " Current Of - đang ở đấy" nói đến hàng mà con trỏ hiện đang trỏ vào. Để sử dụng một con trỏ, bạn cần phải khai báo nó, mở nó, tìm nạp các hàng từ nó, mỗi hàng một lần, cập nhật hoặc xóa (tùy trường hợp) các hàng mà con trỏ đang trỏ vào và đóng con trỏ lại. Bạn sẽ thấy nhiều chi tiết hơn và các ví dụ trong phần này và các phần sau. Hỗ trợ con trỏ thay đổi tùy theo giao diện DB2 như thế nào
ADSENSE
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản