Bài tậ tập Chủ Chủ đề 1 Stored-Procedure & Trigger & Function Thành viên: 1. Hoàng Trung Đức 2. Phạm Trung Cương 3. Nguy ễn Ngọc Minh Tu ấ n 1)
Viế t stored-procedure In ra dòng ‘Hello’ Create Procedure Hello AS Begin Print 'Hello' End
2)
Viế t stored-procedure In ra dòng ‘Xin chào’ . Create Procedure XinChao AS Begin Print 'Xin Chào' End
3)
Viế t stored-procedure In ra dòng ‘Xin chào’ + @ten với @ten là tham s ố đầ ố đầu vào là tên c ủa bạn. Create Procedure Hello @Ten varchar varchar( (60) 60) AS Begin Print 'Xin Chào '+ '+@Ten End
4)
Viế t stored-procedure In ra dòng ‘Xin chào’ + @ten với @ten là tham s ố đầ ố đầu vào là tên Tiế Tiế ng ng Việ Việt có dấ u của bạn. Create Procedure Hello @Ten Nvarchar Nvarchar( (60) 60) AS Begin Print 'Xin Chào '+ '+ @Ten End
5)
Viế t stored-procedure Nh ập vào 2 s ố @s1,@s2. In ra t ổ ng ng @s1+@s2. Create Procedure Sumary @s1 float float, , @s2 float As Begin Declare @Result float Print @s1 + @s2 End
Khoa Hệ thố ng ng thông tin – Đại học Công nghệ thông tin – ĐHQG Tp.HCM
1
6)
Viế t stored-procedure Nhập vào 2 s ố @s1,@s2. In ra câu ‘Tổ ng là : @tg’ với @tg=@s1+@s2. Create Procedure Sumary @s1 float, @s2 float As Begin Declare @tg float set @tg = @s1 + @s2 Print N'Tổng là ' + cast (@tg as varchar(60)) End
7)
Viế t stored-procedure Nhập vào 2 s ố @s1,@s2. Xuấ t t ổ ng @s1+@s2 ra tham s ố @tong. Cho th ự c thi và in giá trị của tham số này để kiể m tra. Create proc Sumary1 @So1 int, @So2 int, @Tong int out AS Begin SET @Tong = @So1 + @So2; End Declare @Sum int Exec Sumary1 1, -2, @Sum out Print cast(@Sum as char(10))
8)
Viế t stored-procedure Nhập vào 2 s ố @s1,@s2. Xuấ t t ổ ng @s1+@s2 ra tham s ố @tong. Cho th ự c thi và in giá trị của tham số này để kiểm tra dưới dạng ‘Tổ ng là : @tg’ với @tg =@s1+@s2. Create proc Sumary2 @So1 int, @So2 int, @Tong int out AS Begin SET @Tong = @So1 + @So2; End Declare @Sum int Exec Sumary2 1, -2, @Sum out Print N'Tổng là: '+cast(@Sum as char(10))
9)
Viế t stored-procedure Nhập vào 2 s ố @s1,@s2. In ra max c ủa chúng. CREATE PROCEDURE GetMax @s1 int, @s2 int as begin If @s1>@s2 print cast(@s1 as char(2)); else print cast(@s2 as char(2)); end
Khoa Hệ thố ng thông tin – Đại học Công nghệ thông tin – ĐHQG Tp.HCM
2
10)
Viế t stored-procedure Nhập vào 2 s ố @s1,@s2. In ra câu ‘Số lớn nhấ t của @s1 và @s2 là @max’ với @s1,@s2,max là các giá trị tương ứ ng. CREATE PROCEDURE GetMax1 @s1 int, @s2 int as begin If @s1>@s2 print N'Số l ớ n nhất của '+@s1+ ' và '+@s2+' là '+ cast(@s1 as char(2)); else print N'Số l ớ n nhất của '+@s1+ ' và '+@s2+' là '+ cast(@s2 as char(2)); end
11)
Viế t stored-procedure Nhập vào 2 số @s1,@s2. Xuấ t min và max c ủa chúng ra tham s ố @max, @min. Cho thự c thi và in giá tr ị của các tham số này để kiể m tra. CREATE PROCEDURE RetMinMax @s1 int, @s2 int,@max int out,@min int out as begin
If @s1>@s2 begin Set @max=@s1; Set @min=@s2; end else begin Set @max=@s2; Set @min=@s1; end end go Declare @max int,@min int exec RetMinMax 2,3,@max out,@min out print N'Số lớ n:'+cast(@max as char(10)) print N'Số bé:'+cast(@min as char(10))
1.1. Store-Prodedure có vòng lặp 12)
Viế t stored-procedure Nhập vào số nguyên @n. In ra các s ố từ 1 đế n @n. Create Procedure PrintToN @n int as begin declare @i int set @i=0 while (@i<=@n) begin print @i set @i=@i+1 end end
Khoa Hệ thố ng thông tin – Đại học Công nghệ thông tin – ĐHQG Tp.HCM
3
13)
Viế t stored-procedure Nhập vào số nguyên @n. In ra t ổ ng các số chẵn từ 1 đế n @n Create Procedure PrintSumChan @n int as begin declare @sum int set @sum=0 while (@n>0) begin if(@n%2=0) set @sum=@sum+@n set @n=@n-1 end print @sum end
14)
Viế t stored-procedure Nhập vào số nguyên @n. In ra t ổ ng, và s ố lượng các số chẵn từ 1 đế n @n Create Procedure PrintSumChanCount @n int as begin declare @sum int declare @count int set @sum=0 set @count=0 while (@n>0) begin if(@n%2=0) begin set @sum=@sum+@n set @count=@count+1 end set @n=@n-1 end print N'Tổng các số chẵn: ' + cast(@sum as varchar(10)) print N'Số lượ ng các số chẵn: ' + cast(@count as varchar(10)) end
15)
Viế t stored-procedure Nhập vào 2 s ố. In ra ướ c chung lớn nhấ t của chúng theo g ợi ý dưới đây. Create Procedure GetUCLN as begin declare @UCLN int set @UCLN = @s1 % while (@UCLN!=0) begin set set set end print @s2 end
@s1 int, @s2 int
@s2
@s1=@s2 @s2=@UCLN @UCLN=@s1%@s2
Khoa Hệ thố ng thông tin – Đại học Công nghệ thông tin – ĐHQG Tp.HCM
4
16)
Viế t stored-procedure Nhập vào 2 s ố nguyên @s1,@s2. Xuất ước chung lớn nhấ t của @s1 và @s2 ra tham số @gcd. Cho thự c thi và in b ằng lệnh select giá trị của tham số này để kiểm tra dướ i dạng ‘Kế t quả : ucln(@s1,@s2) = @gcd’ trong đó thay thế @s1,@s2,@gcd bởi các giá trị tương ứ ng. Create Procedure GetUCLN1 @s1 int, @s2 int, @gcd int out as begin declare @UCLN int set @UCLN = @s1 % @s2 while (@UCLN!=0) begin set @s1=@s2 set @s2=@UCLN set @UCLN=@s1%@s2 end set @gcd=@s2 end Go Declare @gcd int Declare @s1 int Declare @s2 int Exec GetUCLN1 10,15,@gcd out Print N'Kết quả: UCLN('+cast(@s1 as char(10))+','+cast(@s2 as char(10))+')='+cast(@gcd as char(10)); Select @gcd
1.2. Store-Prodedure có đệ quy 17)
Viế t stored-procedure Cài đặt có dùng đệ quy, thuật toán Euler tìm ước chung lớn nhấ t (a,A). Create Procedure GetUCLN as begin declare @UCLN int set @UCLN = @s1 % while (@UCLN!=0) begin set set set end print @s2 end
18)
@s1 int, @s2 int
@s2
@s1=@s2 @s2=@UCLN @UCLN=@s1%@s2
Viế t stored-procedure Nhập vào 2 s ố. In ra ướ c chung lớn nhấ t của chúng. B ắt buộc viế t bằng đệ quy. Create Procedure GetUCLN as begin declare @UCLN int set @UCLN = @s1 % while (@UCLN!=0) begin set set set end print @s2 end
@s1 int, @s2 int
@s2
@s1=@s2 @s2=@UCLN @UCLN=@s1%@s2
Khoa Hệ thố ng thông tin – Đại học Công nghệ thông tin – ĐHQG Tp.HCM
5
19)
Viế t stored-procedure Nhập vào số nguyên @n <= 5. In ra t ấ t cả các số nhị phân có @n bit. Ví dụ : @n=2 thì k ế t quả in được là 00 01 10 11
2. Bài tập v ề Cursor 20)
Viế t một stored proc có nội dung: Dùng lệnh print để in ra danh sách mã các t ự a sách. create proc PrintTuaSach as declare @c cursor declare @MaTuaSach varchar(20) set @c = cursor for Select MaTuaSach From TuaSach open @c fetch next from @c into @MaTuaSach while @@fetch_status = 0 begin print @MaTuaSach fetch next from @c into @MaTuaSach end close @c deallocate @c
21)
Viế t một stored proc có nội dung: Dùng lệnh print để in ra danh sách mã và h ọ tên các độc giả. create proc PrintDocGia as declare @c cursor declare @MaDG varchar(20) declare @TenDG varchar(60) set @c = cursor for Select MaDG,TenDG From DOCGIA open @c fetch next from @c into @MaDG,@TenDG while @@fetch_status = 0 begin print @MaDG +' - ' + @TenDG fetch next from @c into @MaDG,@TenDG end close @c deallocate @c
3. Bài tập v ề Trigger 22)
Viế t trigger khi thêm m ới, sử a tên tác gi ả, thêm/sử a một tự a sách thì in ra câu thông báo b ằng Tiế ng Việt ‘Đã thêm mới tựa sách’ . create trigger Baitap22 on TuaSach for insert,update,delete as begin Print N'Đã thêm mớ i tự a sách' end
Khoa Hệ thố ng thông tin – Đại học Công nghệ thông tin – ĐHQG Tp.HCM
6
23)
Viế t trigger khi s ử a tên tác gi ả cho một (hoặc nhi ều) tự a sách thì in ra: -
Danh sách mã các t ự a sách vừa được sử a.
-
Danh sách mã tự a sách vừa được sử a và tên tác gi ả mới.
-
Danh sách mã tự a sách vừa được sử a và tên tác gi ả cũ.
-
Danh sách mã tự a sách vừa được sử a cùng tên tác gi ả cũ và tác giả mới. Gợi ý : + Câu lệnh insert into T select… from … cho phép insert cùng lúc nhiề u dòng. + Dùng bảng Inserted (hoặc/và Deleted).
-
Câu thông báo b ằng Tiế ng Việt ‘Vừ a sử a thông tin của tự a sách có mã s ố xxx’ với xxx là mã t ự a sách vừa được sử a.
24)
create trigger Baitap22 on TuaSach for insert as begin transaction declare @TenSach_tmp char(8) select @TenSach_tmp=TenSach from TuaSach if (@TenSach_tmp != null) begin Print N'Đã trùng tên tựa sách, không thêm đượ c' rollback transaction end commit
Khoa Hệ thố ng thông tin – Đại học Công nghệ thông tin – ĐHQG Tp.HCM
7