Bài giảng Hệ quản trị cơ sở dữ liệu: Chương 4 trình bày về Transact-SQL nâng cao. Nội dung cụ thể của chương này gồm có: Khai báo và sử dụng biến, các lệnh điều khiển, cursor, stored procedure, function. Mời các bạn cùng tham khảo!
Chương 4: Transact-SQL nâng cao Phạm Nguyên Thảo Trường Đại học Khoa học Tự nhiên Khoa Công nghệ Thông tin Bộ mơn Hệ thống Thơng tin pnthao@fit.hcmuns.edu.vn Nội dung • Khai báo sử dụng biến • Các lệnh điều khiển • Cursor • Stored procedure • Function Biến cục • Là đối tượng chứa giá trị thuộc kiểu liệu định • Tên biến: – Bắt đầu ký tự @ • Tầm vực biến: – Biến cục có giá trị query batch stored procedure/ function Biến cục - Khai báo • Khai báo biến cục lệnh declare – Cung cấp tên biến kiểu liệu Declare tên_biến Kiểu_dữ_liệu • Ví dụ: Declare @MaSinhVien char(10) Declare @HoTen nvarchar(30) Declare @Sum float, @Count int Biến cục - Gán giá trị • Dùng lệnh set để gán giá trị cho biến – Giá trị gán cho biến phải phù hợp với kiểu liệu biến Set tên_biến = giá_trị Set tên_biến = tên_biến Set tên_biến = biểu_thức Set tên_biến = kết_quả_truy_vấn Gán giá trị (tt) Câu truy vấn phải trả dịng có cột • Ví dụ Set @MaLop = „TH2001‟ Set @SoSV = (select count (*) from SinhVien) Set @MaLop = „TH‟+Year(@NgayTuyenSinh) Biến cục - Gán giá trị (tt) • Đưa kết truy vấn vào biến: Ví dụ : SV(MaSV: int; HoTen: nvarchar(30), Tuoi int) Select @Var1 = HoTen, @Var1 = Tuoi from SV where MaSV = • Lưu ý: câu truy vấn trả nhiều dòng, biến nhận giá trị tương ứng dòng Biến tồn cục • Là biến hệ thống SQL Server cung cấp – Tên biến bắt đầu @@ (2 ký tự @) – SQL tự cập nhật giá trị cho biến này, NSD gán giá trị trực tiếp – Bản chất hàm (function) • Một số biến hệ thống thường dùng – @@error – @@rowcount – @@trancount – @@fetch_status Nội dung • Khai báo sử dụng biến • Các lệnh điều khiển • Cursor • Stored procedure • Function 10 Debug stored procedure 53 Nội dung • Khai báo sử dụng biến • Các lệnh điều khiển • Cursor • Stored procedure • Function 54 Hàm người dùng (user function) – khái niệm • Giống stored procedure: – Là mã lệnh tái sử dụng – Chấp nhận tham số input – Dịch lần từ gọi cần • Khác stored procedure – Chấp nhận nhiều kiểu giá trị trả (chỉ giá trị trả về) – Không chấp nhận tham số out put – Khác cách gọi thực 55 Hàm người dùng – khái niệm (tt) • Có thể xem hàm người dùng thuộc loại tùy theo giá trị trả : – Giá trị trả kiểu liệu sở (int, varchar, float, datetime…) – Giá trị trả bảng có từ câu truy vấn – Giá trị trả bảng mà liệu có nhờ tích lũy dần sau chuỗi thao tác xử lý insert 56 Hàm người dùng – khai báo • Loại 1: Giá trị trả kiểu liệu sở Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns DataType As Dù khơng có tham số phải ghi cặp ngoặc rỗng Begin … Return {value | variable | expression} End Dù thân function có lệnh phải đặt Begin End 57 Hàm người dùng – khai báo (tt) – Ví dụ: Create function SoLonNhat (@a int,@b int,@c int) return int As Begin declare @max int set @max = @a if @b > @max set @max = @b if @c > @max set @max = @c return @max End 58 Hàm người dùng – khai báo (tt) • Loại 2: Giá trị trả bảng liệu có từ câu truy vấn Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns Table As Return [ ( ]select_statement [ ) ] Go Thân function ln có lệnh, khơng đặt Begin End 59 Hàm người dùng – khai báo (tt) – Ví dụ Create function DanhSachMatHang ( @MaDonHang varchar(10) ) returns Table As Return (Select MH.TenHang,MH.DonGia From ChiTietDH CT, MatHang MH Where CT.MaDH = @MaDonHang and CT.MaMH = MH.MaMH) Go 60 Hàm người dùng – khai báo (tt) • Loại 3: Giá trị trả table mà liệu có nhờ tích lũy dần sau chuỗi thao tác xử lý insert Create function func_name ( {parameter_name DataType [= default ] } [,…n]) returns TempTab_name Table(Table_definition) As Begin … Return End 61 Hàm người dùng – khai báo (tt) – Ví dụ: Create function DanhSachLop () returns DS Table(@MaLop varchar(10),@SoSV int) As xử lý insert liệu vào bảng DS return Go 62 Hàm người dùng – Khai báo (tt) • Lưu ý : Trong thân hàm không sử dụng hàm hệ thống bất định (Built-in nondeterministic functions ), bao gồm : – GETDATE – GETUTCDATE – NEWID – RAND – TEXTPTR – @@TOTAL_ERRORS, @@CPU_BUSY, @@TOTAL_READ, @@IDLE, @@TOTAL_WRITE, @@CONNECTIONS … 63 Hàm người dùng – sử dụng • Các hàm người dùng sử dụng câu truy vấn, biểu thức… phù hợp kiểu liệu trả • Ví dụ: – Select dbo.SoLonNhat(3,5,7) – Select * from DanhSachLop() 64 Hàm người dùng – sử dụng (tt) • Lưu ý: – Nếu dùng giá trị mặc định tham số, phải dùng từ khóa default vị trí tham số (khác với thơng thường khơng ghi gì) – Khi gọi hàm loại (trả giá trị bản), phải có tên owner hàm kèm (ví dụ dbo.SoLonNhat) 65 Hàm người dùng (tt) • Thay đổi hàm người dùng Thay từ khóa create lệnh tạo hàm từ khóa alter • Xóa hàm người dùng Drop function tên_hàm_cần _xóa – Ví dụ : Drop function DanhSachMatHang 66 Các hàm hệ thống • Ngoài hàm người dùng định nghĩa, SQL Server cung cấp hàm xây dựng sẵn hệ thống • Các hàm cung cấp tiện ích xử lý chuỗi, xử lý thời gian, xử lý số học… • Sinh viên tìm hiểu thêm hàm Books on-line tài liệu tham khảo 67 ... tên_biến Kiểu _dữ_ liệu • Ví dụ: Declare @MaSinhVien char(10) Declare @HoTen nvarchar(30) Declare @Sum float, @Count int Biến cục - Gán giá trị • Dùng lệnh set để gán giá trị cho biến – Giá trị gán cho... dòng, biến nhận giá trị tương ứng dịng Biến tồn cục • Là biến hệ thống SQL Server cung cấp – Tên biến bắt đầu @@ (2 ký tự @) – SQL tự cập nhật giá trị cho biến này, NSD gán giá trị trực tiếp – Bản... procedure • Function 23 Cursor - Khái niệm • Là cấu trúc liệu ánh xạ đến tập dòng liệu kết câu truy vấn (select) • Cho phép duyệt qua tập dòng liệu đọc giá trị dòng 24 Cursor - Khái niệm (tt) • Vị trí