Hãy khởi đầu nhanh chóng với DB2 9 pureXML Phần 5: Phát triển các ứng dụng Java với dữ liệu XML của DB2 potx - Pdf 12

Hãy khởi đầu nhanh chóng với DB2 9 pureXML
Phần 5: Phát triển các ứng dụng Java với dữ liệu XML của
DB2
IBM Data Studio
Data Studio của IBM dựa trên nền tảng Eclipse 3.4, một dự án nguồn mở có sẵn để tải về miễn
phí. Để biên dịch và chạy bất kỳ ứng dụng XML của DB2 nào với bàn làm việc này, bạn cần tạo
một dự án và bao gồm các thư viện DB2 phù hợp trong đường dẫn xây dựng của dự án, bao gồm
cả các thư viện hỗ trợ trình điều khiển tuân theo JDBC 4.0 của DB2. Để cấu hình môi trường của
bạn, hãy hoàn thành các bước sau:
1. Khởi chạy Data Studio.
2. Tạo một dự án mới. Đầu tiên chúng ta sẽ sử dụng một dự án đơn giản. Chuyển sang
phối cảnh Java (Window > Open Perspective > Java) và chọn File > New > Java
Project (Dự án Java). Làm theo các trình thủ thuật để chỉ rõ tên của dự án. Với các mục
khác, hãy giữ lại các thiết lập mặc định.
3. Thêm các thư viện DB2 vào đường dẫn xây dựng dự án của bạn. Chọn dự án của bạn,
nhấn chuột phải và chọn Properties (Các đặc tính). Chọn Java Build Path (Đường dẫn
xây dựng Java), và nhấn vào thẻ Libraries (Các thư viện). Thêm các tệp .jar bên ngoài
phù hợp của DB2, như db2jcc.jar, db2jcc_javax.jar, and db2jcc_license_cu.jar.
4. Theo tùy chọn, tạo ra một gói cho ứng dụng của bạn. Chọn dự án của bạn, nhấn chuột
phải và chọn New > Package.
Để biết chi tiết về việc tạo các dự án và các gói, hãy tham khảo thông tin trợ giúp trực tuyến.
Dữ liệu mẫu
Các ví dụ trong bài viết này làm việc với bảng "clients" (Các khách hàng) đã tạo ra trong bài
"Hãy khởi đầu nhanh chóng với DB2 9, Phần 2" (developerWorks, 03.2006). Để giúp xem lại
nhanh chóng, bảng này được định nghĩa như là:

Liệt kê 1. Liệt kê mã mẫu với chiều rộng tối đa

create table clients(
id int primary key not null,
name varchar(50),

vùng lưu trữ đặc biệt của ứng dụng có thể cần được tăng thêm. Nếu các giá trị này được thiết lập
không phù hợp, hiệu năng thời gian chạy của bạn có thể chậm hoặc bạn có thể không có khả
năng chèn các tài liệu XML lớn vào các bảng của DB2 do không đủ không gian ghi nhật ký.
Bạn có thể xem lại và thay đổi các tham số cấu hình cơ sở dữ liệu DB2 từ DB2 Control Center
(Trung tâm điều khiển của DB2) (chọn Tools > Configuration Assistant) hoặc bộ xử lý dòng
lệnh DB2. Hãy tham khảo hướng dẫn sử dụng sản phẩm để biết các chi tiết.
Kết nối tới cơ sở dữ liệu của bạn
Làm việc với dữ liệu XML của DB2 đòi hỏi thiết lập một kết nối đến cơ sở dữ liệu chứa dữ liệu
của bạn. Không có gì đặc biệt về đoạn mã này - nó giống như logic mà bạn đã viết để kết nối với
bất kỳ cơ sở dữ liệu DB2 nào.
Liệt kê 3 có một lớp trình trợ giúp (helper) với các phương thức để thiết lập và đóng một kết nối
cơ sở dữ liệu DB2.

Liệt kê 3. Lớp trình trợ giúp để thu nhận và phát hành các kết nối cơ sở dữ liệu public class Conn {
// for simplicity, I've hard-coded account and URL data.
private static String user = "user1";
private static String pwd = "mypassword";
private static String url = "jdbc:db2:test";

// this method gets a database connection
public static Connection getConn(){
Connection conn=null;

// load the appropriate DB2 driver and
// get a connection to the "test" database
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");

Thông thường, các lập trình viên Java cần chèn dữ liệu XML đã chứa trong các tệp vào DB2,
mặc dù nó cũng có thể chèn dữ liệu XML từ các chuỗi ký tự, từ dữ liệu nhị phân (bao gồm cả các
đối tượng lớn) và từ các câu lệnh chọn ở dưới của SQL. Ở đây cần cân nhắc về cách chèn dữ liệu
XML từ các tệp và từ chuỗi ký tự đơn giản. Hãy tham khảo hướng dẫn sử dụng DB2 9 để biết
chi tiết về các kịch bản chèn khác.
DB2 9 cũng cho phép bạn chèn các tài liệu XML có hoặc không xác nhận hợp lệ chúng dựa vào
các lược đồ XML đã đăng ký trước. Các mẫu trong bài viết này trình bày cả hai cách tiếp cận.
Chèn tệp không xác nhận hợp lệ
Phương thức insertFile() trong Liệt kê 4 minh họa cách chèn dữ liệu từ một tệp XML vào cột
"clients.contactinfo". Phương thức này bắt đầu bằng cách định nghĩa một số biến để sử dụng sau.
Ba biến đầu tiên tương ứng với các cột mã định danh ID, tên và trạng thái trong bảng "clients".
Biến thứ tư là tên của tệp XML được chèn vào cột "contactinfo". Để cho đơn giản, các giá trị đã
được mã hóa cứng trong phương thức này; trong một môi trường sản xuất, sẽ thu được các giá trị
đầu vào khác nhau.
Sau khi thiết lập một kết nối cơ sở dữ liệu, hãy tạo một chuỗi đơn giản cho câu lệnh INSERT của
bạn. Như bạn thấy, nó trông giống như bất kỳ câu lệnh INSERT khác của DB2 và sử dụng các dấu
tham số cho bốn giá trị cột đầu vào của bạn. Câu lệnh INSERT được chuẩn bị như thường lệ và
bốn dấu tham số của nó được thiết lập. Để thiết lập dấu tham số cho cột XML, hãy mở một
FileInputStream, chuyển vào vị trí của tệp XML của chúng ta. Ngoài ra hãy lấy chiều dài của
tệp này và sử dụng thông tin này làm đầu vào cho phương thức setBinaryStream(). Cuối cùng,
thực hiện câu lệnh, kiểm tra các lỗi và đóng kết nối.

Liệt kê 4. Chèn dữ liệu XML từ một tệp

public static void insertFile(){
try {
// for simplicity, I've defined variables with input data
int id = 1885;
String name = "Amy Liu";
String status = "Silver";

Chèn một tệp XML có xác nhận hợp lệ đòi hỏi một chút nỗ lực lập trình bổ sung. Giả sử bạn đã
tạo ra và đã đăng ký tệp ClientInfo.xsd như đã thảo luận trong bài "Hãy khởi đầu nhanh chóng
với DB2 9, Phần 2" (developerWorks, 03.2006), bạn chỉ cần thay đổi một dòng mã trong Liệt kê
4 để ra lệnh cho DB2 chèn tệp XML có xác nhận hợp lệ. Mã này liên quan đến định nghĩa về
chuỗi query.
Như trong Liệt kê 5, câu lệnh INSERT đã chỉnh sửa gọi hàm XMLValidate trước khi xác định một
dấu tham số cho dữ liệu XML. Hàm này cũng yêu cầu bạn chỉ rõ trình định danh của lược đồ
XML được sử dụng để xác nhận hợp lệ. Ở đây, có tham chiếu đến một lược đồ đã đăng ký trước
được gọi là "user1.mysample".

Liệt kê 5. Chèn dữ liệu XML từ một tệp có xác nhận hợp lệ

String query = "INSERT INTO clients (id, name, status contactinfo) " +
"VALUES (?, ?, ?, xmlvalidate(? according to xmlschema id
user1.mysample))";

Nếu tệp XML đầu vào của bạn có chứa dữ liệu là hợp lệ theo lược đồ đã quy định, DB2 chèn
hàng này. Nếu không, toàn bộ câu lệnh sẽ sai và không có dữ liệu nào được chèn vào hàng này.
Chèn chuỗi ký tự không xác nhận hợp lệ
Phương thức insertString() trong Liệt kê 5 minh họa cách bạn có thể chèn một tài liệu XML
đúng định dạng được gán cho một biến chuỗi ký tự trong DB2. Logic này không khác nhiều so
với ví dụ trước về chèn dữ liệu từ một tệp. Thay vì sử dụng phương thức setBinaryStream()
của câu lệnh đã chuẩn bị của bạn, hãy sử dụng phương thức setString(). Để đơn giản, tài liệu
XML trong định nghĩa biến xml đã được mã hóa cứng trong ví dụ này.
Lưu ý: Có các ký tự thoát (các vạch chéo ngược) trước các dấu ngoặc kép là một phần của tài
liệu XML (ví dụ như số phiên bản XML trong ví dụ dưới đây).

Liệt kê 6. Chèn dữ liệu XML từ một chuỗi ký tự

public static void insertString(){

// prepare the statement
PreparedStatement insertStmt = conn.prepareStatement(query);
insertStmt.setInt(1, id);
insertStmt.setString(2, name);
insertStmt.setString(3, status);
insertStmt.setString(4, xml);

// execute the statement
if (insertStmt.executeUpdate() != 1) {
System.out.println("No record inserted.");
}
. . .
conn.close();
}
catch (Exception e) { . . . }
} Chèn chuỗi ký tự có xác nhận hợp lệ
Như bạn có thể mong đợi, việc xác nhận hợp lệ các tài liệu XML, được đưa ra như là các chuỗi
ký tự, đòi hỏi nỗ lực lập trình thêm một chút. Thật vậy, chỉ có một dòng mã cần được sửa đổi
định nghĩa của biến query. Bạn chỉ cần thay đổi câu lệnh INSERT để gọi hàm XMLValidate,
cũng giống như bạn đã làm trong Liệt kê 5.
Đây là câu lệnh đã chỉnh sửa:

Liệt kê 7. Chèn dữ liệu XML từ một chuỗi ký tự có xác nhận hợp lệ

String query = "INSERT INTO clients (id, name, status contactinfo) " +
"VALUES (?, ?, ?, xmlvalidate(? according to xmlschema id
user1.mysample))";

PreparedStatement selectStmt = null;
String query = null, stringDoc = null;
ResultSet rs = null;
int clientID = 1885;

try{
// get a connection
Connection conn = Conn.getConn();

// define, prepare, and execute the query
// this will retrieve all XML data for a specific client
query = "select contactinfo from clients where id = " + clientID
selectStmt = conn.prepareStatement(query);
rs = selectStmt.executeQuery();

// check for results
if (rs.next() == false) {
System.out.println("Can't read document with id " + clientID);
}

// fetch XML data as a string and print the results
else {
stringDoc = rs.getString(1);
System.out.println(stringDoc);
}
. . .
conn.close();
}
catch (Exception e) { . . . }
}

selectStmt.setString(1, status);
ResultSet rs = selectStmt.executeQuery();

// iterate over and print the results
while(rs.next() ){
System.out.println("Name: " + rs.getString(1) +
" Email: " + rs.getString(2));
}
. . .
// release resources
}
catch (Exception e) { . . . }

Mã này đưa ra một câu lệnh SQL/XML gọi hàm XMLQuery. Nó cung cấp một biểu thức đường
dẫn đến hàm này làm cho DB2 chuyển hướng đến phần tử "email" đầu tiên bên dưới phần tử
"Client" gốc của các tài liệu XML đích. (Lưu ý rằng biểu thức đường dẫn phân biệt chữ hoa, chữ
thường). Biến $c và mệnh đề FROM của SQL cho biết nơi có thể tìm thấy các tài liệu đích này
trong cột "contactinfo" của bảng "clients". Mệnh đề WHERE của SQL giới hạn thêm các tài liệu
XML đích theo các các tài liệu được tìm thấy chỉ trong các hàng có "trạng thái" khách hàng là
một giá trị cụ thể (trong phương thức này là "Bạc").
Kết quả đầu ra trong chương trình này có thể xuất hiện tương tự như:

Liệt kê 10. Kết quả đầu ra từ ứng dụng trước

Name: Lisa Hansen Email:

Name: Amy Liu Email: <email>[email protected]</email>
. . . .

Trong kết quả đầu ra mẫu này, không có thông tin email nào được trả về cho một khách hàng có

selectStmt.setString(1, status);
selectStmt.setString(2, state);
selectStmt.setString(3, city);
. . .
}

Hầu hết truy vấn sẽ quen thuộc với bạn, vì vậy phần này chỉ tập trung vào bốn dòng cuối cùng
của nó. Hàm XMLExists ra lệnh cho DB2 xác định xem một tài liệu XML cụ thể có chứa một địa
chỉ khách hàng có thành phố và bang cụ thể không. Mệnh đề PASSING quy định có thể tìm các tài
liệu XML ở đâu trong cột "contactinfo". Hàm CAST được gọi hai lần để gộp các giá trị của các
tham số đầu vào (đối với thành phố và bang) với các kiểu dữ liệu phù hợp.
Kết quả đầu ra của chương trình này tương tự với kết quả trong Liệt kê 9, giả sử cả hai khách
hàng Lisa Hansen và Amy Liu sống ở San Jose, California.
Sử dụng XQuery như là một ngôn ngữ cấp cao nhất
Mặc dù DB2 hỗ trợ đầy đủ cho XQuery như một ngôn ngữ cấp cao nhất, đặc tả XQuery ban đầu
không xử lý các dấu tham số. Trong thực tế, điều này hạn chế việc sử dụng các XQuery trong
các ứng dụng Java. Các phần trước đã minh họa cách bạn có thể nhúng XQueries trong SQL (ví
dụ, khi sử dụng các hàm XMLQuery và XMLExists để kết hợp các dấu tham số. Phần này tìm hiểu
những gì bạn có thể làm với XQuery thuần túy trong các ứng dụng Java của bạn.
Ví dụ sau đây chứa một XQuery tương tự như một XQuery đã trình bày trong bài "Hãy khởi đầu
nhanh chóng với DB2 9, Phần 4: Truy vấn dữ liệu DB2 XML bằng XQuery" (developerWorks,
04.2006). XQuery này xác định những khách hàng nào sinh sống tại San Jose, California. Đối
với mỗi khách hàng như vậy, nó dựng lên một đoạn XML chứa một "emailList" bao gồm tất cả
các địa chỉ email của khách hàng đó. Cuối cùng, nó trả về một chuỗi các emailList.

Liệt kê 12. Lấy các đoạn XML bằng XQuery

try{
// get a database connection
Connection conn = Conn.getConn();

một địa chỉ email. Bản ghi đủ điều kiện thứ hai không chứa gì cả (có lẽ vì khách hàng chưa cung
cấp thông tin này); kết quả là, emailList của nó là rỗng. Bản ghi đủ điều kiện thứ ba cho biết rằng
có hai địa chỉ email trong bản ghi của khách hàng này. Bản ghi đủ điều kiện thứ tư chứa một địa
chỉ email của khách hàng.

Liệt kê 13. Kết quả đầu ra mẫu từ ứng dụng trước

<emailList><email>[email protected]</email></emailList>

<emailList/>

<emailList><email>[email protected]</email>
<email>[email protected]</email></emailList>

<emailList><email>[email protected]</email></emailList>

Bạn có thể muốn biết tại sao các tên của từng khách hàng đủ điều kiện không có trong kết quả
của chúng ta. Câu trả lời rất đơn giản: XQuery làm việc với dữ liệu XML và các tên khách hàng
được lưu trữ trong một cột VARCHAR của SQL. Vì vậy, nếu bạn muốn kết quả đầu ra bao gồm các
tên của các khách hàng đủ điều kiện cũng như các địa chỉ email của họ, thì bạn sẽ phải viết một
câu truy vấn bao gồm cả SQL lẫn XQuery.
Cập nhật và xóa dữ liệu XML
Để cập nhật và xóa dữ liệu XML được lưu trữ trong DB2, bạn sử dụng các câu lệnh SQL UPDATE
và DELETE. Các câu lệnh này có thể bao gồm các hàm SQL/XML giới hạn các hàng và các cột
đích dựa trên các giá trị phần tử XML được lưu trữ trong các cột XML. Ví dụ, bạn có thể xoá các
hàng chứa thông tin về các khách hàng sống trong vùng có mã vùng bưu điện cụ thể hoặc cập
nhật dữ liệu XML (và dữ liệu XML) chỉ với các khách hàng sống trong một bang cụ thể.
Vì cú pháp để sử dụng các hàm SQL/XML trong các câu lệnh UPDATE và DELETE có cùng cú
pháp để sử dụng chúng trong các câu lệnh SELECT, nên sẽ không nhắc lại toàn bộ các mẫu mã ở
đây. Thay vào đó, chỉ cần đưa ra các đoạn trích ngắn. Trước tiên, hãy xem xét các hoạt động

" passing clients.contactinfo as \"y\", " +
" cast(? as char(2)) as \"state\" )";
. . .
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, state);
. . .

Các ví dụ cập nhật
Với DB2 9, bạn có thể cập nhật dữ liệu trong một cột XML bằng cách sử dụng câu lệnh SQL
UPDATE hoặc một thủ tục được lưu trữ, như là DB2XMLFUNCTIONS.XMLUPDATE. Trong cả hai
trường hợp, cập nhật cột XML xảy ra ở một mức tài liệu chứ không phải ở một mức phần tử.
Tuy nhiên, các lập trình viên, những người cập nhật bằng cách sử dụng các thủ tục đã lưu, không
cần cung cấp toàn bộ tài liệu XML cho DB2. Họ chỉ cần quy định các phần tử XML được cập
nhật và DB2 bảo toàn dữ liệu tài liệu không thay đổi cũng như cập nhật các phần tử đã quy định.
Các lập trình viên ban hành các câu lệnh UPDATE cần quy định toàn bộ tài liệu (không chỉ các
phần tử mà họ muốn thay đổi).
Tuy nhiên, một phần của bản phát hành DB2 9.5 đã đơn giản hóa rất nhiều việc cập nhật các tài
liệu XML hiện có. Trong phiên bản này, chúng ta triển khai thực hiện một hàm XQuery mới gọi
là "Transform" (Chuyển đổi). Hàm này mở rộng ngôn ngữ XQuery ban đầu vượt xa truy vấn
XML đơn giản, để cập nhật XML.
Liệt kê 16 cập nhật thông tin liên hệ cho mã định danh khách hàng là 1333 bằng cách sử dụng dữ
liệu XML chứa trong một tệp. Lưu ý rằng dữ liệu XML mới được xác nhận hợp lệ dựa vào một
lược đồ đăng ký như là một phần của hoạt động cập nhật:

Liệt kê 16. Cập nhật dữ liệu XML từ một tệp

int clientID = 1333;
String fn = "c:/XMLFiles/Client1333.xml"; // input file
String query = "update clients set contactinfo = " +
"xmlvalidate(? according to xmlschema id user1.mysample) " +

"<street>54 Moorpark Ave.</street>" +
"<city>San Jose</city>" +
"<state>CA</state>" +
"<zip>95110</zip>" +
"</Address>" +
"<phone>" +
"<work>4084630110</work>" +
"<home>4081114444</home>" +
"<cell>4082223333</cell>" +
"</phone>" +
"<fax>4087773111</fax>" +
"<email>[email protected]</email>" +
"</Client>";

String query = "update clients set contactinfo = ?" +
"where xmlexists('$y/Client/phone[home=$homeph]' " +
" passing clients.contactinfo as \"y\", " +
" cast(? as varchar(11)) as \"homeph\" )";
. . .
PreparedStatement stmt = conn.prepareStatement(query);
stmt.setString(1, xml);
stmt.setString(2, homeph);
. . . Liệt kê 17b. Cập nhật dữ liệu XML với một chuỗi ký tự với DB2 v9.5 và hàm chuyển đổi
XQuery.

String homeph = "4081114444";
String xml =

để tạo ra một câu lệnh SQL/XML tương tự như một câu lệnh có trong Liệt kê 9.
Để tạo ra một câu lệnh SQL/XML, hãy thực hiện các bước sau:
1. Chuẩn bị vùng làm việc của bạn.
2. Quy định các đặc điểm truy vấn của bạn.
3. Thực hiện truy vấn của bạn.
Hãy lần lượt đi dần qua từng bước.
Chuẩn bị vùng làm việc của bạn
Các câu lệnh SQL được tạo ra như một phần của "Dự án dữ liệu" có thể truy cập dữ liệu từ phối
cảnh Data của bàn làm việc. Để tạo một dự án, hoàn thành các bước sau:
1. Mở phối cảnh Data. Chọn Window > Open Perspective > Other > Data.
2. Tạo một kết nối đến cơ sở dữ liệu đích của bạn. Nhấn chuột phải trong ô Database
Explorer (Trình thám hiểm cơ sở dữ liệu) ở góc dưới bên trái. Chọn New Connection
(Kết nối mới) và ghi rõ tên cơ sở dữ liệu , tên người dùng và mật khẩu của bạn.
3. Tạo một dự án dữ liệu mới. Nhấn chuột phải trong ô Data Project Explorer ((Trình thám
hiểm dự án dữ liệu) ở góc trên bên trái. Chọn New > Project > Data > Data
Development Project. Khi được nhắc, hãy cung cấp cho dự án một tên bạn đã chọn và
liên kết nó với kết nối cơ sở dữ liệu bạn tạo ra trước đó.
Với việc mở kết nối cơ sở dữ liệu và tạo một dự án dữ liệu, bạn đã sẵn sàng để xây dựng các truy
vấn.
Xây dựng truy vấn của bạn
Để giữ cho hướng dẫn này đơn giản, hãy tạo một câu lệnh SQL/XML trả về địa chỉ email chính
của các khách hàng có một trạng thái cụ thể. Truy vấn sẽ tương tự như sau:

Liệt kê 18. Truy vấn SQL/XML mẫu

SELECT name, xmlquery('$c/Client/email[1]'
passing contactinfo as "c")
from clients where status = ?

Làm theo các bước sau để tạo truy vấn của bạn:

4. Chọn Constant (Hằng số) và sau đó là String Constant khi được nhắc.
5. Chỉ rõ một tên biến máy chủ cho đầu vào của người dùng (ví dụ như "status").
Nhấn Finish.
Thực hiện truy vấn của bạn
Sau khi xây dựng truy vấn của mình, bạn đã sẵn sàng để chạy nó.
1. Xác định vị trí truy vấn trong dự án Dữ liệu của bạn, nhấn chuột phải và chọn Run SQL
(Chạy SQL).
2. Khi được nhắc, chỉ rõ một giá trị đầu vào cho trạng thái khách hàng (ví dụ như "Vàng"
hay "Bạc") và nhấn OK.
3. Xem lại các kết quả trong ô Data Output (Đầu ra dữ liệu).
Các thủ tục đã lưu
Trong các môi trường được nối mạng, các thủ tục được lưu trữ thường làm giảm giao tiếp cần
thiết giữa các ứng dụng máy khách và DB2. Tất nhiên, điều này cải thiện hiệu năng thời gian
chạy. Với DB2 9, các thủ tục được lưu trữ có thể bao gồm các tham số và các biến XML.
Trong khi việc thảo luận phát triển thủ tục được lưu trữ chi tiết nằm ngoài phạm vi của bài viết
này, tác giả đã đưa ra xem xét lại một kịch bản đơn giản để bạn có thể thấy một thủ tục được lưu
trữ của DB2 có thể được viết như thế nào để lấy các phần của các tài liệu XML. Kịch bản này sử
dụng các trình thủ thuật trong Data Studio để tạo, triển khai và chạy mã thủ tục được lưu trữ
SQL cần thiết. Nếu muốn, bạn có thể phát triển và triển khai một thủ tục được lưu trữ SQL tương
đương khi sử dụng bộ xử lý dòng lệnh DB2. Ngoài ra, bạn có thể viết các thủ tục được lưu trữ
dựa trên XML bằng Java.
Với ví dụ này, bạn sẽ viết một thủ tục được lưu để lấy các tên và các địa chỉ email chính của các
khách hàng có một trạng thái cụ thể, cũng giống như bạn đã làm ở trên. Mặc dù thủ tục này khá
đơn giản, nó sẽ giúp bạn hiểu cách tạo ra các thủ tục dựa trên SQL truy vấn và trả về dữ liệu
XML bằng các trình thủ thuật có sẵn.
Để tạo thủ tục này, hãy thực hiện một vài bước đơn giản:
1. Chuẩn bị vùng làm việc của bạn.
2. Quy định các nội dung về thủ tục của bạn.
3. Triển khai và thử nghiệm thủ tục của bạn.
Hãy lần lượt đi dần qua từng bước này.

Add > Function > Next. Trong cửa sổ tiếp theo, chỉ rõ thể loại hàm như là XML
và XMLQuery là chữ ký hàm. Nhấn Finish.
5. Trong thẻ Conditions, dựng mệnh đề SQL WHERE. Chỉ rõ clients.status làm cột,
các dấu bằng ("=") làm toán tử và :input làm giá trị.
6. Sửa đổi câu lệnh SQL kết quả để bao gồm biểu thức đường dẫn thích hợp để lấy
địa chỉ email đầu tiên trong cột "contactinfo". Cụ thể, thay đổi dòng
XMLQUERY để đọc: xmlquery('$c/Client/email[1]' passing
contactinfo as "c")
7. Phân tích cú pháp truy vấn của bạn để kiểm tra xem có các lỗi cú pháp nào không.
3. Chỉ rõ thông tin triển khai. Cụ thể là, bạn có thể tìm thấy nó có ích với Enable
Debugging (Cho phép gỡ lỗi).
4. Theo tùy chọn, hãy xem lại mã SQL được tạo ra. Nhấn Show SQL. (Xem Liệt kê 20
để biết mẫu nào sẽ xuất hiện).
5. Hoàn tất thủ tục được lưu trữ. Nhấn Finish.

Liệt kê 20. Mã mẫu được tạo ra cho thủ tục được lưu trữ SQL liên quan đến dữ liệu XML

CREATE PROCEDURE foo (INPUT VARCHAR(10)
DYNAMIC RESULT SETS 1

SQL Stored Procedure
INPUT

P1:BEGIN

Variables declaration fragment inserted from SP_SQL_VAR.FRAGMENT Declare cursor
DECLARE cursor1 CURSOR WITH RETURN FOR


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status