intTypePromotion=1

Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2

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

0
68
lượt xem
3
download

Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2

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

Roger Sanders, Quản lý cao cấp, EMC Tóm tắt: Hướng dẫn này giới thiệu cho bạn về lập trình SQL nhúng và dẫn bạn qua từng bước làm thế nào để xây dựng một ứng dụng SQL nhúng. Hướng dẫn này giới thiệu quá trình để chuyển đổi một hoặc nhiều tệp tin mã nguồn của ngôn ngữ lập trình bậc cao có chứa SQL nhúng thành một ứng dụng có thể chạy được. Đây là bài viết thứ tư trong một loạt gồm chín hướng dẫn được thiết kế để giúp bạn chuẩn bị cho kỳ thi lấy chứng...

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 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2

  1. Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2 Roger Sanders, Quản lý cao cấp, EMC Tóm tắt: Hướng dẫn này giới thiệu cho bạn về lập trình SQL nhúng và dẫn bạn qua từng bước làm thế nào để xây dựng một ứng dụng SQL nhúng. Hướng dẫn này giới thiệu quá trình để chuyển đổi một hoặc nhiều tệp tin mã nguồn của ngôn ngữ lập trình bậc cao có chứa SQL nhúng thành một ứng dụng có thể chạy được. Đây là bài viết thứ tư trong một loạt gồm chín hướng dẫn được thiết kế để giúp bạn chuẩn bị cho kỳ thi lấy chứng chỉ Nhà phát triển ứng dụng DB2 (kỳ thi 733). Trước khi bạn bắt đầu Về hướng dẫn này Hướng dẫn này giới thiệu cho bạn về lập trình SQL nhúng và dẫn bạn qua từng bước cơ bản làm thế nào để xây dựng một ứng dụng SQL nhúng. Hướng dẫn này cũng giới thiệu cho bạn về việc chuyển đổi một hoặc nhiều tệp tin mã nguồn của ngôn ngữ lập trình bậc cao có chứa SQL nhúng thành một ứng dụng có thể chạy được. Trong hướng dẫn này, bạn sẽ tìm hiểu về: Các câu lệnh SQL được nhúng vào một tệp tin mã nguồn của ngôn ngữ lập  trình bậc cao như thế nào. Các bước liên quan đến việc phát triển một ứng dụng SQL nhúng.  Các biến chủ là gì, chúng được tạo ra như thế nào và chúng được sử dụng  như thế nào.
  2. Các biến chỉ thị (indicator) là gì, chúng được tạo ra như thế nào và chúng  được sử dụng khi nào. Làm thế nào để phân tích các nội dung của một biến cấu trúc dữ liệu của  một SQL Communications Area (SQLCA -Vùng trao đổi thông tin SQL). Làm thế nào để thiết lập một kết nối cơ sở dữ liệu từ một ứng dụng SQL  nhúng. Làm thế nào để nắm bắt và xử lý các lỗi khi chúng xuất hiện.  Làm thế nào để chuyển đổi các tệp tin mã nguồn có chứa các SQL nhúng  thành một ứng dụng có thể chạy được. Đây là bài viết thứ tư trong một loạt gồm chín hướng dẫn được thiết kế để giúp bạn chuẩn bị cho kỳ thi lấy chứng chỉ Nhà phát triển ứng dụng DB2® (kỳ thi 733). Các tư liệu trong hướng dẫn này bao gồm các mục tiêu trong Phần 4 của kỳ thi, mang tên "Lập trình SQL nhúng". Bạn không cần phải dùng một bản sao của DB2 Universal Database (Cơ sở dữ liệu đa năng DB2) để hoàn thành hướng dẫn này. Tuy nhiên, bạn có thể tải về một phiên bản dùng thử miễn phí IBM DB2 Universal Database Enterprise Edition (Cơ sở dữ liệu phổ quát DB2 của IBM, Ấn bản doanh nghiệp) và một bản sao miễn phí của DB2 Express-C 9 từ trang tải về DB2 Express-C. Các mục tiêu Sau khi hoàn thành hướng dẫn này, bạn sẽ có thể:
  3. Thiết lập một kết nối cơ sở dữ liệu trong một ứng dụng SQL nhúng.  Thi hành các câu lệnh SQL trong một ứng dụng SQL nhúng.  Phân tích các kết quả và xử lý các lỗi thường gặp khi thi hành các câu lệnh  SQL trong một ứng dụng SQL nhúng. Các điều kiện cần trước Để hiểu một số tư liệu được trình bày trong hướng dẫn này, bạn cần phải quen thuộc với những thuật ngữ sau đây: Đối tượng: Là mọi thứ trong một cơ sở dữ liệu có thể được tạo ra hoặc  được thao tác với SQL (ví dụ như các bảng, các khung nhìn, các chỉ mục và các gói). Bảng: Là một cấu trúc logic được sử dụng để trình bày dữ liệu như là một  tập hợp các hàng không theo thứ tự với một số các cột cố định. Mỗi cột có chứa một bộ các giá trị, mỗi giá trị của cùng một kiểu dữ liệu (hoặc một kiểu con của kiểu dữ liệu cột); các định nghĩa về các cột tạo thành cấu trúc bảng và các hàng chứa các dữ liệu bảng thực tế. Trình tối ưu hóa DB2: Là một thành phần của trình tiền biên dịch  (precompiler) SQL chọn một kế hoạch truy cập cho một câu lệnh SQL của Ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language) bằng cách mô hình hóa chi phí thi hành của một số các kế hoạch truy cập thay thế được cho nhau và lựa chọn kế hoạch có chi phí ước tính thấp nhất.
  4. Giới thiệu về lập trình SQL nhúng SQL và SQL nhúng Ngôn ngữ truy vấn có cấu trúc hay SQL (Structured Query Language) là một ngôn ngữ được tiêu chuẩn hóa để thao tác với các đối tượng cơ sở dữ liệu và dữ liệu chứa trong chúng. SQL bao gồm một số các câu lệnh khác nhau, được sử dụng để định nghĩa, thay đổi và hủy bỏ các đối tượng cơ sở dữ liệu và để chèn, sửa đổi, xóa và lấy ra các giá trị dữ liệu. Nhưng vì SQL về bản chất là không có tính thủ tục, nên SQL không phải là một ngôn ngữ lập trình mục đích chung. (Các câu lệnh SQL được thực hiện bởi trình quản lý cơ sở dữ liệu DB2 (DB2 Database Manager), chứ không phải bởi hệ điều hành). Do vậy, các ứng dụng cơ sở dữ liệu thường được phát triển bằng cách kết hợp quyết định và kiểm soát tuần tự của một ngôn ngữ lập trình bậc cao với các khả năng lưu trữ, thao tác và lấy ra các dữ liệu của SQL. Một số phương pháp có sẵn để kết hợp SQL với một ngôn ngữ lập trình bậc cao, nhưng cách tiếp cận đơn giản nhất là nhúng các câu lệnh SQL trực tiếp vào các tệp tin mã nguồn của ngôn ngữ lập trình bậc cao đã được sử dụng để tạo ra ứng dụng. Kỹ thuật này được gọi là lập trình SQL nhúng. Một trong những mặt hạn chế khi phát triển các ứng dụng bằng cách d ùng SQL nhúng là ở chỗ các trình biên dịch (compiler) của ngôn ngữ lập trình bậc cao không nhận ra và do đó không thể diễn giải được, các câu lệnh SQL được nhúng trong một tệp tin mã nguồn. Do đó, các tệp tin mã nguồn có chứa các câu lệnh SQL nhúng phải được xử lý trước (bằng một quá trình được gọi là tiền biên dịch) trước khi chúng có thể được biên dịch và được liên kết để tạo ra một ứng dụng có thể chạy được. Để tạo điều kiện thuận lợi cho việc tiền xử lý này, mỗi câu lệnh SQL nhúng trong một tệp tin mã nguồn của ngôn ngữ lập trình bậc cao phải được gắn thêm các tiếp đầu ngữ với các từ khóa EXEC SQL và kết thúc bằng hoặc một
  5. dấu chấm phẩy (trong C/C++) hoặc bằng từ khóa END-EXEC (trong COBOL). Một công cụ đặc biệt, gọi là trình tiền biên dịch SQL thực hiện việc tiền xử lý; khi trình tiền biên dịch SQL bắt gặp từ khóa EXEC SQL, nó sẽ thay thế đoạn văn bản tiếp theo (cho đến khi nó tìm thấy một dấu chấm phẩy (;) hoặc từ khóa END- EXEC) bằng một lời gọi hàm đặc thù của DB2 để chuyển tiếp câu lệnh SQL đã bắt gặp đến Trình quản lý cơ sở dữ liệu DB2 để xử lý. Một cách tương tự, Trình quản lý cơ sở dữ liệu DB2 không thể làm việc trực tiếp với các biến của ngôn ngữ lập trình bậc cao. Thay vào đó, nó phải sử dụng các biến đặc biệt được gọi là các biến chủ (host variables) để di chuyển dữ liệu giữa một ứng dụng và một cơ sở dữ liệu. (Bạn có thể xem xét kỹ hơn về các biến chủ trong phần dưới đây mang tên "Khai báo các biến chủ" (Declaring host variables")). Các biến chủ trông giống như bất kỳ biến nào của ngôn ngữ lập trình bậc cao; vì vậy, để tách riêng chúng ra, chúng phải được định nghĩa trong một phần đặc biệt được gọi là phần khai báo. Ngoài ra, để cho trình tiền biên dịch SQL phân biệt các biến chủ với văn bản khác trong một câu lệnh SQL, tất cả các tham chiếu tới các biến chủ phải được đặt sau một dấu hai chấm (:). SQL tĩnh Một câu lệnh SQL tĩnh là một câu lệnh SQL có thể được mã hóa cứng trong một chương trình ứng dụng trong thời gian phát triển vì các thông tin về cấu trúc và các đối tượng (ví dụ như các bảng, cột và các kiểu dữ liệu) mà nó sẽ tương tác với chúng đã được biết trước. Do các chi tiết về một câu lệnh SQL tĩnh được biết rõ trong thời gian phát triển, công việc phân tích câu lệnh và lựa chọn kế hoạch truy cập dữ liệu tối ưu cho việc thi hành câu lệnh được trình tối ưu hóa DB2 thực hiện như là một phần của quá trình phát triển. Bởi vì dạng hoạt động của chúng được
  6. lưu trữ trong cơ sở dữ liệu (như là một gói) và không phải được tạo ra trong thời gian chạy ứng dụng, các câu lệnh SQL tĩnh thi hành một cách nhanh chóng. Mặt kém của cách tiếp cận này là tất cả các câu lệnh SQL tĩnh phải được chuẩn bị (nói cách khác, các kế hoạch truy cập của chúng phải được tạo ra và được lưu trữ trong cơ sở dữ liệu) trước khi chúng có thể được thi hành. Hơn nữa, các câu lệnh SQL tĩnh không thể bị thay đổi trong thời gian chạy và mỗi ứng dụng có sử dụng SQL tĩnh phải kết buộc các gói hoạt động của nó với mọi cơ sở dữ liệu mà ứng dụng sẽ tương tác. Ngoài ra, bởi vì các ứng dụng SQL tĩnh đòi hỏi biết trước về các đối tượng cơ sở dữ liệu, các thay đổi được thực hiện cho những đối tượng đó sau khi một ứng dụng đã được phát triển có thể sinh ra các kết quả không mong muốn. Sau đây là những ví dụ về các câu lệnh SQL tĩnh: SELECT COUNT(*) FROM employee UPDATE employee SET lastname = 'Jones' WHERE empid = '001' SELECT MAX(salary), MIN(salary) INTO :MaxSalary, :MinSalary FROM employee
  7. Nói chung, các câu lệnh SQL tĩnh rất phù hợp với các ứng dụng hiệu năng cao, thi hành các hoạt động định sẵn đối với một tập hợp các đối tượng cơ sở dữ liệu đã biết. SQL động Mặc dù các câu lệnh SQL tĩnh tương đối dễ dàng để kết hợp vào một ứng dụng, việc sử dụng của chúng có một chút bị hạn chế do khuôn dạng của chúng phải được biết trước. Các câu lệnh SQL động, mặt khác, linh hoạt hơn nhiều, vì chúng có thể được xây dựng trong thời gian chạy ứng dụng; thông tin về cấu trúc của câu lệnh SQL động và các đối tượng mà nó có kế hoạch tương tác với các đối tượng đó không cần phải được biết trước. Hơn nữa, các câu lệnh SQL động không có một định dạng được mã hóa trước, cố định, các đối tượng dữ liệu mà chúng tham khảo có thể thay đổi mà không ảnh hưởng đến câu lệnh (với điều kiện rằng các đối tượng được câu lệnh này tham chiếu không bị xóa đi). Mặc dù, các câu lệnh động SQL nói chung là linh hoạt hơn các câu lệnh tĩnh SQL, chúng thường sẽ phức tạp hơn để kết hợp vào một ứng dụng. Và do công việc phân tích câu lệnh để lựa chọn một kế hoạch truy cập tốt nhất được thực hiện trong thời gian chạy ứng dụng (một lần nữa, bằng trình tối ưu hóa của DB2), câu lệnh SQL động có thể mất nhiều thời gian hơn để thi hành cùng một việc so với SQL tĩnh tương đương. (Bởi vì các câu lệnh SQL động có thể tận dụng các thống kê cơ sở dữ liệu có sẵn trong thời gian chạy ứng dụng, có một số trường hợp trong đó câu lệnh SQL động chạy nhanh hơn so với một câu lệnh SQL tĩnh tương đương, nhưng điều đó là ngoại lệ và không phải là tiêu chuẩn). Sau đây là những ví dụ về câu lệnh SQL động:
  8. SELECT COUNT(*) FROM ? INSERT INTO EMPLOYEES VALUES (?, ?) DELETE FROM DEPARTMENT WHERE DEPTID = ? Nói chung, các câu lệnh SQL động thích hợp cho các ứng dụng có tương tác với một cơ sở dữ liệu thay đổi nhanh chóng hoặc cho phép những người sử dụng định nghĩa và thực hiện các truy vấn không theo thể thức (ad hoc). Xây dựng một ứng dụng SQL nhúng Khai báo các biến chủ Trước đó, chúng ta thấy rằng Trình quản lý cơ sở dữ liệu DB2 dựa vào các biến chủ để di chuyển dữ liệu giữa một ứng dụng và một cơ sở dữ liệu. Chúng ta cũng thấy rằng các biến chủ được định nghĩa trong một phần đặc biệt được gọi là phần khai báo và đó là những gì phân biệt chúng với các biến khác của ngôn ngữ lập trình bậc cao. Vậy thì các phần khai báo được viết như thế nào? Bắt đầu của một phần khai báo được định nghĩa bởi câu lệnh BEGIN DECLARE SECTION, còn kết thúc phần khai báo được định nghĩa bởi câu lệnh END
  9. DECLARE SECTION. Vì vậy, một phần khai báo tiêu biểu trong một tệp tin mã nguồn C/C++ trông giống như: ... // Define The SQL Host Variables Needed EXEC SQL BEGIN DECLARE SECTION; char EmployeeID[7]; char WorkDept[4]; char Job[9]; char Sex[2]; double Salary; double Bonus; double Commision; EXEC SQL END DECLARE SECTION; ... Một phần khai báo có thể được viết mã bất cứ ở đâu mà các khai báo biến ngôn ngữ lập trình bậc cao có thể được viết trong một tệp tin mã nguồn. Và mặc dù một
  10. tệp tin mã nguồn thường chỉ chứa một phần khai báo, nhưng có thể cho phép nhiều phần khai báo. Các biến chủ để chuyển dữ liệu vào một cơ sở dữ liệu được gọi là các biến chủ đầu vào, trong khi các biến chủ để nhận dữ liệu từ một cơ sở dữ liệu được gọi là các biến chủ đầu ra. Bất kể một biến chủ được sử dụng cho đầu vào hay đầu ra, các thuộc tính của nó phải phù hợp với bối cảnh trong đó nó được sử dụng. Vì vậy, bạn phải định nghĩa các biến chủ sao cho các kiểu dữ liệu của chúng và các chiều dài của chúng là tương thích với các kiểu dữ liệu và các chiều dài của các đối tượng cơ sở dữ liệu mà chúng được dự định để làm việc với các đối tượng cơ sở dữ liệu đó. Ngoài ra, mỗi biến chủ được sử dụng trong một ứng dụng cũng phải được gán một tên duy nhất -- không được phép có tên trùng lặp trong cùng một tệp tin, ngay cả khi sử dụng nhiều phần khai báo. Một công cụ có tên là Bộ tạo khai báo (Declaration Generator) có thể được sử dụng để tạo ra các khai báo biến chủ cho các cột của một bảng đã cho trong một cơ sở dữ liệu. Công cụ này tạo ra các tệp tin mã nguồn khai báo SQL nhúng, sau đó các tệp tin này có thể được chèn vào các ứng dụng bằng ngôn ngữ C/C++, ngôn ngữ Java, COBOL và FORTRAN. Để biết thêm thông tin về các tiện ích này, hãy tham khảo lệnh db2dclgn trong Tham khảo lệnh DB2 (DB2 Command Reference). Vậy thì các biến chủ được được sử dụng như thế nào để di chuyển dữ liệu giữa một ứng dụng và một cơ sở dữ liệu? Cách dễ nhất để trả lời câu hỏi này là hãy xem xét một đoạn mã nguồn nhúng SQL đơn giản, chẳng hạn như một đoạn mã trong Liệt kê 1. Liệt kê 1. Sử dụng đúng các biến chủ ... // Define The SQL Host Variables Needed
  11. EXEC SQL BEGIN DECLARE SECTION; char EmployeeNo[7]; char LastName[16]; EXEC SQL END DECLARE SECTION; ... // Retrieve A Record From The Database EXEC SQL SELECT empno, lastname INTO :EmployeeNo, :LastName FROM employee WHERE empno = '000100'; // Do Something With The Results ... Trong ví dụ này, khi bạn thi hành câu lệnh SQL SELECT empno, lastname FROM employee WHERE empno = '000100', các kết quả được chuyển giao tới các biến
  12. chủ EmployeeNo và LastName. Các lệnh và các hàm được sử dụng để làm cho chuyển giao này thực sự xảy ra được thêm vào khi tệp tin mã nguồn được biên dịch. Khai báo các biến chỉ thị Theo mặc định, các cột trong một bảng cơ sở dữ liệu DB2 có thể chứa các giá trị null. Và do các giá trị null không được lưu trữ giống như cách mà dữ liệu truyền thống được lưu giữ, nên phải có các điều kiện đặc biệt nếu một ứng dụng dự định làm việc với các dữ liệu null. Các giá trị null không thể được lấy ra và được sao chép tới các biến chủ theo cùng một cách giống như có thể làm với các giá trị dữ liệu khác. Thay vào đó, một cờ đặc biệt phải được kiểm tra để xác định xem liệu một giá trị cụ thể có nghĩa là null hay không. Và để có được giá trị của cờ này, một biến chủ đặc biệt được gọi là một biến chỉ thị (hoặc biến chỉ thị null) phải được kết hợp với một biến chủ đã gán cho một cột có thể nhận giá trị null. Bởi vì các biến chỉ thị có thể được truy cập bởi cả hai Trình quản lý cơ sở dữ liệu DB2 lẫn chương trình ứng dụng, chúng cũng phải được định nghĩa trong một phần khai báo. Chúng cũng phải được gán một kiểu dữ liệu tương thích với kiểu dữ liệu DB2 SMALLINT. Do đó, mã được sử dụng để định nghĩa một biến chỉ thị trong tệp tin mã nguồn C/C++ sẽ trông giống như sau: // Define The SQL Host Variables Needed EXEC SQL BEGIN DECLARE SECTION;
  13. short SalaryNullIndicator; EXEC SQL END DECLARE SECTION; Một biến chỉ thị được kết hợp với một biến chủ cụ thể khi nó đứng sau biến chủ trong một câu lệnh SQL. Và một khi đã kết hợp với một biến chủ, một biến chỉ thị có thể được xem xét ngay sau khi biến chủ tương ứng của nó đã được điền dữ liệu. Nếu một biến chỉ thị chứa một giá trị âm, nó biểu thị rằng một giá trị null đ ã được tìm thấy và giá trị của biến chủ tương ứng vì thế được bỏ qua. Nếu trái lại, giá trị tương ứng của biến chủ là hợp lệ. Một lần nữa, để hiểu cách các biến chỉ thị được sử dụng như thế nào, việc xem xét một đoạn mã nguồn sẽ có ích. Liệt kê 2, được viết bằng ngôn ngữ lập trình C, cho thấy một ví dụ về cách các biến chỉ thị được định nghĩa và được sử dụng như thế nào. Liệt kê 2. Sử dụng đúng các biến chỉ thị ... // Define The SQL Host Variables Needed EXEC SQL BEGIN DECLARE SECTION;
  14. char EmployeeNo[7]; double Salary; // Salary - Used If SalaryNI Is Positive ( >= 0 ) short SalaryNI; // Salary NULL Indicator - Used // To Determine If Salary // Value Should Be NULL EXEC SQL END DECLARE SECTION; ... // Declare A Static Cursor EXEC SQL DECLARE cursor1 CURSOR FOR SELECT empno, DOUBLE(salary) FROM employee; // Open The Cursor EXEC SQL OPEN cursor1; // If The Cursor Was Opened Successfully, Retrieve And
  15. // Display All Records Available while (sqlca.sqlcode == SQL_RC_OK) { // Retrieve The Current Record From The Cursor EXEC SQL FETCH cursor1 INTO :EmployeeNo, :Salary :SalaryNI; // If The Salary Value For The Record Is NULL, ... if (SalaryNI < 0) { printf("No salary information is available for "); printf("employee %s\n", EmployeeNo); } } // Close The Open Cursor EXEC SQL CLOSE C1; ...
  16. Các biến chỉ thị cũng có thể được dùng để gửi các giá trị null tới một cơ sở dữ liệu khi một hoạt động chèn hoặc cập nhật được thực hiện. Khi xử lý các câu lệnh SQL INSERT và UPDATE, Trình quản lý cơ sở dữ liệu DB2 kiểm tra đầu tiên các giá trị của bất kỳ các biến chỉ thị nào được cung cấp, nếu một hoặc nhiều biến chỉ thị có chứa một giá trị âm, nó gán một giá trị null vào cột thích hợp, với điều kiện là cột có thể nhận giá trị null. (Nếu biến chỉ thị được gán bằng không hoặc có chứa một số dương, hoặc nếu không có biến chỉ thị nào được sử dụng, thì thay vào đó, Trình quản lý cơ sở dữ liệu DB2 gán giá trị được lưu trữ trong biến chủ tương ứng với cột thích hợp). Do vậy, mã được sử dụng trong tệp tin mã nguồn C/C++ để gán một giá trị null vào một cột trong một bảng sẽ trông giống như sau: ValueInd = -1; EXEC SQL INSERT INTO tab1 VALUES (:Value :ValueInd); Cấu trúc dữ liệu SQLCA
  17. Cho đến nay, bạn mới chỉ xem xét làm thế nào bạn có thể sử dụng các biến chủ và các biến chỉ thị để di chuyển dữ liệu giữa các ứng dụng SQL nhúng và các đối tượng cơ sở dữ liệu. Tuy nhiên, nhiều khi một ứng dụng SQL nhúng cần giao tiếp với chính Trình quản lý cơ sở dữ liệu DB2. Hai cấu trúc dữ liệu SQL đặc biệt được sử dụng để thiết lập đường liên kết truyền thông quan trọng này: cấu trúc dữ liệu SQL Communications Area (SQLCA – vùng trao đổi thông tin SQL) và cấu trúc dữ liệu SQL Descriptor Area (SQLDA – Vùng bộ mô tả SQL). Cấu trúc dữ liệu SQLCA chứa một sưu tập các phần tử được Trình quản lý cơ sở dữ liệu DB2 cập nhật mỗi khi một câu lệnh SQL hay một hàm API quản trị DB2 thi hành. Cấu trúc dữ liệu này phải tồn tại trước khi Trình quản lý cơ sở dữ liệu DB2 có thể điền dữ liệu vào nó. Vì vậy, bất kỳ ứng dụng nào có chứa SQL nhúng hay gọi một hoặc nhiều API quản trị phải định nghĩa ít nhất một biến cấu trúc dữ liệu SQLCA. Thực vậy, một ứng dụng như thế sẽ không biên dịch thành công nếu một biến cấu trúc dữ liệu SQLCA không tồn tại. Vậy thì một cấu trúc dữ liệu SQLCA trông nh ư thế nào? Bảng 1 liệt kê các phần tử tạo thành một biến cấu trúc dữ liệu SQLCA. Bảng 1. Các phần tử cấu trúc dữ liệu SQLCA Tên Kiểu dữ liệu M ô tả phần tử Một dấu hiệu bắt mắt (eye catcher) dùng cho phần kết xuất nội dung sqlcaid CHAR(8) lưu trữ. Để giúp nhận biết trực quan cấu trúc dữ liệu, phần tử này
  18. thường chứa giá trị "SQLCA". Nếu thông tin số thứ tự dòng được trả về từ việc phân tích phần thân thủ tục SQL, byte thứ sáu có chứa ký tự L. Kích cỡ tính theo byte, của chính sqlcabc INTEGER cấu trúc dữ liệu SQLCA. Phần tử này sẽ luôn chứa giá trị 136. Giá trị mã trả về SQL. Một giá trị là 0 biểu thị việc thi hành thành công, một giá trị dương biểu thị việc thi hành với các cảnh báo và một giá trị âm biểu thị một lỗi. sqlcode INTEGER Tham khảo DB2 Message Reference, các tập 1 và 2 hướng dẫn sử dụng sản phẩm (xem Tài nguyên để tìm đường liên kết) để nhận thêm thông tin về về các giá trị mã trả về SQL cụ thể. Kích cỡ tính theo byte, của dữ liệu được lưu trữ trong phần tử sqlerrmc sqlerrml SMALLINT của cấu trúc này. Giá trị này có thể là bất kỳ số nào giữa 0 và 70; một giá trị là 0 cho biết rằng không có dữ liệu nào đã được lưu trữ trong
  19. trường sqlerrmc. Một hoặc nhiều thẻ bài thông báo lỗi, phân tách nhau bằng giá trị "0xFF", chúng sẽ được thay thế sqlerrmc CHAR(70) bằng các biến trong các mô tả về các điều kiện cảnh báo hoặc lỗi. Phần tử này cũng được sử dụng khi thiết lập thành công một kết nối. Một giá trị chẩn đoán, biểu diễn kiểu máy chủ DB2 hiện đang được sử dụng. Giá trị này bắt đầu với một mã có ba chữ cái xác định phiên bản và bản phát hành của sản phẩm và tiếp theo là 5 năm ký số để xác định mức sửa đổi của sản sqlerrp CHAR(8) phẩm. Ví dụ, SQL09010 có nghĩa là DB2 phiên bản 9, bản phát hành 1, mức sửa đổi 0. Nếu phần tử sqlcode chứa một giá trị âm, phần tử này sẽ chứa một mã có tám ký tự để nhận dạng mô-đun được báo cáo có lỗi. Một mảng gồm sáu giá trị số INTEGER sqlerrd nguyên để cung cấp các thông tin ARRAY chẩn đoán thêm khi một lỗi xảy ra.
  20. (Tham khảo Bảng 2 để biết thêm thông tin về các thông tin chẩn đoán có thể được trả lại trong phần tử này). Một mảng của các giá trị ký tự để dùng như các chỉ thị cảnh báo; mỗi phần tử của mảng có chứa hoặc một khoảng trống hoặc chữ cái W. Nếu SQL phức hợp được sử dụng, trường này chứa một tích lũy của sqlwarn CHAR(11) các chỉ thị cảnh báo đã được thiết lập cho tất cả các câu lệnh con được thi hành trong khối câu lệnh SQL phức hợp. (Tham khảo Bảng 3 để biết thêm thông tin về các kiểu thông tin cảnh báo có thể được trả về trong phần tử này). Các giá trị SQLSTATE xác định rõ kết quả của câu lệnh SQL được thi hành gần đây nhất. (Chúng ta sẽ sqlstate CHAR(5) thảo luận các vấn đề này chi tiết hơn trong phần dưới đây mang tên các SQLSTATE.")
ADSENSE
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2