« Home « Kết quả tìm kiếm

Quản Lý Dữ Liệu - Cơ Sở Dữ Liệu phần 3


Tóm tắt Xem thử

- Đóng gói chỉ các thao tác cho phép trên CSDL vào các SP và quy định truy xuất dữ liệu phải thông qua SP.
- Ngoài ra còn có thể phân quyền trên SP Hỗ trợ tốt hơn cho việc đảm bảo an toàn (security) cho CSDL..
- SP giúp cho việc kết xuất báo biểu bằng Crystal Report trở nên đơn giản và hiệu quả hơn rất nhiều so với việc kết xuất dữ liệu trực tiếp từ các bảng và khung nhìn..
- Khai báo và sử dụng thủ tục.
- Cú pháp khai báo:.
- Giá trị trả về của SP dùng một (hay một số) tham số output..
- Ví dụ:.
- Xây dự ng SP cho biết danh sách sinh viên c ủa một l ớ p có m ã cho tr ướ c Create proc DS_Lop @MaLop varchar(10).
- Xây dựng SP tính toán giá trị cho đơn hàng có mã cho trước với quan hệ DonHang như sau:.
- Viết thủ tục thêm một đăng ký của sinh viên vào một học phần (tổng quát ví dụ trong phần If …else).
- Create procedure usp_ThemDangKy.
- Xây dựng SP tính điểm trung bình và xếp loại cho sinh viên thuộc lớp cho trước..
- Set @XL = N’Trung bình’.
- Cú pháp gọi thực hiện thủ tục:.
- o Khi gọi thực hiện SP, dùng từ khóa Exec và cần truyền đủ tham số với kiểu dữ liệu phù hợp và thứ tự chính xác như khai báo trong định nghĩa SP..
- o Có thể truyền giá trị cho tham số đầu vào (input) là một hằng hoặc một biến đã gán giá trị, không truyền được một biểu thức..
- o Để nhận được giá trị kết quả (thông qua tham số đầu ra), cần truyền vào một biến và có từ khóa output..
- o Gọi thủ tục usp_ThemDangKy:.
- Exec usp_ThemDangKy ‘001’, ’HP01’.
- o Gọi thủ tục usp_ThemDangKy có nhận kết quả đầu ra:.
- o Gọi thủ tục usp_ThemDangKy có nhận kết quả đầu ra và kết quả trả về từ thủ tục.
- Exec @KetQua = usp_ThemDangKy ‘001’,’HP01’, @SiSo output o Gọi thực hiện thủ tục xếp loại sinh viên:.
- Exec XepLoaiSV @MaSinhVien,@DiemTB out put,@XepLoai out put Exec XepLoaiSV DiemTB out put,@XepLoai out put Sửa thủ tục.
- Thay từ khóa Create trong lệnh tạo thủ tục bằng từ khóa Alter..
- Xóa thủ tục.
- Là những thủ tục do SQL Server cung cấp sẵn để thực hiện các công việc: quản lý CSDL, quản lý người dùng, cấu hình CSDL,….
- Các thủ tục này có tên bắt đầu bằng “sp_” Khi xây dựng thủ tục, tránh đặt tên thủ tục bắt đầu với “sp_”..
- Kiểu dữ liệu cursor 1.
- Là một cấu trúc dữ liệu ánh xạ đến một tập các dòng dữ liệu kết quả của một câu truy vấn (select)..
- Cho phép duyệt tuần tự qua tập các dòng dữ liệu và đọc giá trị từng dòng..
- Vị trí hiện hành của cursor có thể được dùng như điều kiện trong mệnh đề where của lệnh update hoặc delete: cho phép cập nhật/xoá dữ liệu (dữ liệu thật sự trong CSDL) tương ứng với vị trí hiện hành của cursor..
- Khai báo và sử dụng Cursor Khai báo Cursor.
- Có thể sử dụng cú pháp chuẩn SQL 92 hoặc cú pháp T_SQL mở rộng..
- Lưu ý: Tên cursor trong các cách khai báo không bắt đầu bằng ký tự.
- Ý nghĩa các tham số tùy chọn trong khai báo:.
- o Dynamic: trong thời gian tồn tại, nội dung của cursor có thể thay đổi nếu dữ liệu trong các bảng liên quan có thay đổi..
- o Local: cursor cục bộ, chỉ có thể sử dụng trong phạm vi một khối (query batch) hoặc một thủ tục/ hàm..
- o Global: cursor toàn cục, có thể sử dụng trong một thủ tục/hàm hay một query batch bất kỳ hoặc đến khi bị hủy một cách tường minh..
- o Forward_only: cursor chỉ có thể duyệt một chiều từ đầu đến cuối..
- o Scroll: có thể duyệt lên xuống cursor tùy ý (duyệt theo đa chiều)..
- o Read only: chỉ có thể đọc từ cursor, không thể sử dụng cursor để update dữ liệu trong các bảng liên quan (ngược lại với “for update…”.
- Mặc định khi khai báo cursor nếu không chỉ ra các tùy chọn thì cursor có các tính chất:.
- Đối với cursor dạng forward_only, chỉ có thể fetch next..
- Biến hệ thống @@fetch_status cho biết lệnh fetch vừa thực hiện có thành công hay không, giá trị của biến này cơ sở để biết đã duyệt đến cuối cursor hay chưa..
- Quy trình sử dụng Cursor.
- Khai báo cursor..
- Khai báo các biến tạm để chứa phần tử hiện hành (đang được xử lý) của cursor:.
- Các biến tạm phải cùng kiểu dữ liệu với các trường tương ứng của phần tử trong cursor..
- Có thể đưa các giá trị của dòng hiện hành vào các biến thông qua mệnh đề into của lệnh fetch..
- Nếu không có mệnh đề into, các giá trị của dòng hiện hành sẽ được hiển thị ra cửa sổ kết quả (result pane) sau lệnh fetch..
- Có thể sử dụng vị trí hiện tại như là điều kiện cho mệnh đề where của câu delete/ update (nếu cursor không là read_only)..
- Lặp lại việc duyệt và sử dụng cursor, có thể sử dụng biến @@fetch_status để biết đã duyệt qua hết cursor hay chưa.
- @@FETCH_STATUS = 0 : lấy dữ liệu thành công,.
- 0 : không lấy được dữ liệu..
- Lưu ý: Sau khi đóng, vẫn có thể mở lại nếu cursor chưa bị hủy..
- Duyệt và đọc giá trị từ cursor.
- Cập nhật lại giá trị MaSV = Viết tắt tên Khoa + MaSV hiện tại cho tất cả sinh viên:.
- declare cur_DSKhoa cursor.
- for select MaKhoa, TenKhoa from Khoa open cur_DSKhoa.
- @TenKhoa varchar(30), @TenTat varchar(5) fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa while @@fetch_status = 0.
- fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa end.
- Close cur_DSKhoa Deallocate cur_DSKhoa.
- declare cur_DSKhoa cursor scroll.
- fetch absolute 2 from cur_DSKhoa if (@@fetch_status = 0).
- where current of cur_DSKhoa Close cur_DSKhoa.
- Deallocate cur_DSKhoa 3.
- Ta có thể khai báo một biến kiểu cursor và gán cho nó tham chiếu đến một cursor đang tồn tại..
- Biến cursor có thể được xem như là con trỏ cursor..
- Biến cursor sau khi gán giá trị được sử dụng như một cursor thông thường..
- Ví dụ.
- Xây dựng SP tính điểm trung bình và xếp loại cho sinh viên thuộc lớp cho trước.
- Kết quả ghi xuống CSDL, đồng thời xuất ra tổng số sinh viên xếp loại giỏi của lớp đó..
- Phân tích ví dụ:.
- o Lớp cần xét có nhiều sinh viên, từng sinh viên cần được xử lý thông qua 3 bước:.
- Có thể tái sử dụng thủ tục XepLoaiSVLop..
- Dựa vào điểm trung bình của sinh viên để xác định xếp loại..
- Cập nhật điểm và xếp loại vào bảng sinh viên..
- o Mọi sinh viên đều lặp lại 3 bước trên..
- Mỗi phần tử xử lý tương đối phức tạp (truy vấn, tính toán, gọi thủ tục khác, điều kiện rẽ nhánh, cập nhật dữ liệu,.
- Sử dụng cursor là thích hợp.
- Cursor chứa các sinh viên của lớp cần xét, chỉ cần chứa mã sinh viên là được..
- Xây dựng thủ tục.
- mã lệnh có thể tái sử dụng..
- Biên dịch một lần và từ đó có thể gọi khi cần..
- Chấp nhận nhiều kiểu giá trị trả về (chỉ một giá trị trả về)..
- Có thể xem hàm người dùng thuộc về 3 loại tùy theo giá trị trả về của nó:.
- Giá trị trả về là kiểu dữ liệu cơ sở (int, varchar, float, datetime…)..
- Giá trị trả về là Table có được từ một câu truy vấn..
- Giá trị trả về là table mà dữ liệu có được nhờ tích lũy dần sau một chuỗi thao tác xử lý và insert..
- Khai báo và sử dụng Khai báo hàm người dùng.
- Loại 1: Giá trị trả về là kiểu dữ liệu cơ sở Create function func_name.
- End Ví dụ:.
- Loại 2: Giá trị trả về là một bảng có được từ một câu truy vấn Create function func_name.
- Loại 3: Giá trị trả về là một bảng mà dữ liệu có được nhờ tích lũy dần sau một chuỗi thao tác xử lý và insert..
- Return End Go Ví dụ:.
- --các xử lý insert dữ liệu vào bảng DS return.
- Lưu ý: Trong thân hàm không được sử dụng các hàm hệ thống bất định (Built-in nondeterministic functions.
- @@TOTAL_WRITE, @@CONNECTIONS … Sử dụng hàm người dùng.
- Các hàm người dùng được sử dụng trong câu truy vấn, trong biểu thức… phù hợp kiểu dữ liệu trả về của nó..
- Nếu dùng giá trị mặc định của tham số, phải dùng từ khóa default.

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt