SQL con trỏ, slide bài giảng SQL chương Con trỏ trong SQL, chương 8 cong trỏ, cách tạo con trỏ, cách sử dụng con trỏ trong SQL, Con trỏ trong SQL dugf như thế nào, cách khai báo con trỏ trong SQL, cách truy cập bằng con trỏ trong SQL........
CHƯƠNG Kiểu liệu trỏ CURSOR Khai báo kiểu liệu trỏ • Con trỏ (CURSOR ) tập hợp kết truy vấn (các hàng), với CURSOR ta duyệt qua hàng kết để thi hành tác vụ phức tạp • Đặc điểm : Cho phép thao tác lên dòng liệu trả từ lệnh SELECT Do phải lặp qua dòng liệu nên cách xử lý chậm Khai báo trỏ, trỏ đến tập liệu (kết của Select) lệnh DECLARE: DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement [ FOR { READ ONLY | UPDATE [ OF column_name [ , n ] ] } ] [;] o cursor_name : tên cursor, phải chứa - 128 ký tự o select_statement : lựa chọn đến cột bảng mà ta cần đọc • Lệnh SELECT cursor không chứa mệnh đề COMPUTE, COMPUTE BY, FOR BROWSE, INTO • Trong : INSENSITIVE : tạo copy tạm thay bảng Con trỏ không phép thay đổi việc thay đổi không ảnh hưởng dùng lệnh FETCH lấy giá trị trỏ READ_ONLY : trỏ cập nhật SCROLL: cursor phép di chuyển tới lui, qua lại dòng mẩu tin bên cursor UPDATE [ OF column_name [ , n ]] để xác định khả cập nhật cột với trỏ Nếu OF column_name [ , n ] định, cột danh sách sửa Nếu có lệnh UPDATE mà khơng có danh sách cột mặc định tất cột chỉnh sửa • Ví dụ: ta khai báo trỏ đặt tên là cursorProduct : DECLARE cursorProduct CURSOR FOR SELECT id, title FROM Product • Ngồi ra, khai báo riêng CURSOR sau gán lệnh SELECT vào CURSOR DECLARE @cursor_name CURSOR SET @cursor_name = CURSOR FOR select_statement Khai báo mở rộng (SQL Extended Syntax) DECLARE cursor_name CURSOR [LOCAL | GLOBAL] [FORWARD_ONLY | SCROLL] [STATIC | KEYSET | DYNAMIC ] [READ_ONLY | SCROLL_LOCK] FOR select_statement [FOR UPDATE [OF column name[, n]]] [;] Mở lấy mẫu tin từ trỏ • Khi bắt đầu trình đọc dịng liệu từ Cursor phải mở trỏ, thực sau: Open [GLOBAL] ten_con_tro | @ten_con_tro GLOBAL: gọi biến toàn cục (mặc định biến cục [LOCAL]) @ten_con_tro : tên biến cursor mà tham chiếu đến trỏ • Khi Cursor được mở, trỏ trỏ tới dòng tập liệu, lúc đọc nội dung dịng lệnh FETCH Truy cập đến trỏ lệnh FETCH sau: FETCH [NEXT | PRIOR | FIRST | LAST | ABSOLUTE {n | @nVar} | RELATIVE {n | @nVar}] FROM [GLOBAL] ten_con_tro | @ten_con_tro [INTO @ten_bien[du_lieu]] Trong đó: • NEXT, PRIOR, FIRST, LAST: định cách đọc liệu • ABSOLUTE: định n số dịng liệu cần đọc Nếu: n = 0: giá trị trả n < 0: xuất phát từ phần đáy liệu n > 0: xuất phát từ phần đỉnh liệu • RELATIVE giống ABSOLUTE vị trí 3 Kiểm tra trạng thái trỏ o Để kiểm tra xem hệ thống đọc liệu thành công hay thất bại, sử dụng lệnh @@FETCH_STATUS Để kiểm tra việc FETCH thành cơng kiểm tra điều kiện @@FETCH_STATUS = Ví dụ: để đọc dịng từ đầu đến cuối làm sau: Thực lần FETCH FETCH NEXT FROM contact_cursor; Kiểm tra @@ FETCH_STATUS để xem có hàng để đọc hay khơng WHILE @@FETCH_STATUS = vịng lặp WHILE đọc Cursor thành công BEGIN In kết thực truy vấn dựa kết đọc FETCH NEXT FROM contact_cursor; END Sau khơng cịn dùng đến Cursor, cần đóng lại giải phóng tài nguyên mà chiếm giữ lệnh CLOSE hoặc DEALLOCATE: Đóng trỏ CLOSE [GLOBAL] ten_con_tro | @ten_con_tro Hoặc Giải phóng nhớ DEALLOCATE [GLOBAL] ten_con_tro | @ten_con_tro Lưu ý: CLOSE và DEALLOCATE có khác biệt: o CLOSE sẽ đóng cursor lại tái sử dụng lại lần sau o DEALLOCATE sẽ giải phóng hồn tồn cursor khỏi nhớ, có lệnh tham chiếu tới cursor gây lỗi 4 Phạm vi hoạt động trỏ Phạm vi : LOCAL | GLOBAL : phạm vi hoạt động biến Local biến cục bộ, Global biến toàn cục (tham chiếu đến thủ tục kết nối tạo biến cursor đó) Mặc định LOCAL FORWARD_ONLY : duyệt từ mẩu tin đầu đến cuối , theo chiều tới SCROLL: trỏ phép di chuyển tới lui, qua lại dòng mẩu tin bên ... tin từ trỏ • Khi bắt đầu q trình đọc dịng liệu từ Cursor phải mở trỏ, thực sau: Open [GLOBAL] ten _con_ tro | @ten _con_ tro GLOBAL: gọi biến toàn cục (mặc định biến cục [LOCAL]) @ten _con_ tro... Trong : INSENSITIVE : tạo copy tạm thay bảng Con trỏ khơng phép thay đổi việc thay đổi không ảnh hưởng dùng lệnh FETCH lấy giá trị trỏ READ_ONLY : trỏ cập nhật SCROLL: cursor phép di chuyển... @ten _con_ tro : tên biến cursor mà tham chiếu đến trỏ • Khi Cursor được mở, trỏ trỏ tới dịng tập liệu, lúc đọc nội dung dịng lệnh FETCH Truy cập đến trỏ lệnh FETCH sau: FETCH [NEXT | PRIOR | FIRST