1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Hệ quản trị cơ sở dữ liệu MSSQL 2005: Chương 4 - Hồ Thị Anh Đào

42 7 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 42
Dung lượng 1,99 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cùng nắm kiến thức trong chương này thông qua việc tìm hiểu các nội dung sau: Khai báo và sử dụng biến, cấu trúc lệnh, con trỏ, Stored procedure, một số hàm cơ bản,....Mời các bạn cùng tham khảo!

Trang 1

Chương 4 T-SQL PROGRAMING

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

I KHAI BÁO VÀ SỬ DỤNG BIẾN

Có 2 loại biến: Cục bộ và toàn cục

1 Biến cục bộ:

Định nghĩa: là biến chỉ sử dụng trong đoạn chương

trình khai báo nó như Query Batch, stored procedure/ function , chứa giá trị thuộc một kiểu nhất định

Biến cục bộ được bắt đầu bằng 1 ký hiệu @

Khai báo:

Declare <@tên_biến> <Kiểu_dữ_liệu >, …

Ví dụ:

Declare @MaSinhVien char(10)

Declare @Gioitinh bit, @Ngaysinh SmallDateTime

Trang 3

Gán giá trị cho biến

Cú pháp

Set @tên_biến = {giá_trị | biến |

biểu_thức | Cấu trúc Select }

Ví dụ

Set @MaLop = ‘TH2001’

Set @SoSV = (select count (*) from SinhVien) Set @MaLop = ‘TH’+Year(@NgayTuyenSinh)

Chú ý: Kết quả lệnh Select chỉ cho một giá trị

(không thể nhiều bộ giá trị)

Trang 4

Gán giá trị của cột tại dòng hiện tại hoặc dòng chỉ định

trong Table cho biến

Cú pháp:

Select <@tên biến1>=<Tên cột 1>,

<@tên biến2>=<Tên cột 2>,

[Where <Điều kiện>]

Nếu kết quả của Select cho nhiều dòng thì sẽ gán giá trị của dòng có STT vật lý đầu tiên cho biến

Hiển thị kết quả của biến:

Print <@tên biến>

Ví dụ: Hiển thị dòng ‘Xin chào’ họ tên của sinh viên đầu tiên trong bảng SINHVIEN

Declare @ht nVarchar(30)

Select @ht=HotenFrom SINHVIEN

Print 'Xin chào'+ @ht

Trang 6

Một số biến toàn cục trong SQL

@@ERROR Mã số lỗi của câu lệnh T-SQL cuối cùng bị lỗi

@@FETCH_STATUS Trạng thái truy nhập con trỏ:

0 nếu trạng thái truy nhật cuối cùng thành công -1 nếu có lỗi

@@IDENTITY Giá trị xác định (identity) cuối cùng được thêm

vào

@@ROWCOUNT Số lượng dòng của kết quả câu lệnh SQL gần

đây nhất.

@@SERVERNAME Tên của Server địa phương

@@TRANSCOUNT Số lượng những giao dịch đang được mở

@@VERSION Thông tin về phiên bản SQL Server đang dùng

@@CURSOR_ROWS Số lượng các dòng dữ liệu của con trỏ mới được

mở gần đây nhất

Trang 8

Ví dụ:

Viết lệnh để thêm dữ liệu mới (001,Hồ Thị ,Lan, CT11) vào bảng SINHVIEN Qui định rằng mỗi lớp chỉ được tối đa 50 sinh viên.

Declare @SiSo int

Select @SiSo = Count(MaSV) From SINHVIEN

Trang 9

2 Cấu trúc Case

Cú pháp: Có hai dạng

–Dạng 1 (simple case):

Case Biểu_thức

When Giá_trị 1 Then kết_quả 1

[When Giá_trị 2 Then Kết_quả 2

Trang 10

Có thể thêm Break và Continue trong khối lệnh của while

Break: thoát khỏi vòng While hiện hành

Continue : trở lại đầu vòng While, bỏ qua các lệnh sau đó Giải thích:

Trang 11

Ví dụ: Viết đoạn chương trình tách tên của sinh viên có mã ‘0001’

Trang 12

III- CURSOR (CON TRỎ)

1 Khái niệm:

Là một cấu trúc dữ liệu ánh xạ đến một tập các dòng dữ liệu là kết quả của một câu truy vấn (select), cho phép duyệt tuần tự các dòng dữ liệu và đọc giá trị từng dòng trong tập kết quả

Sử dụng con trỏ có thể đến vị trí một dòng nhất định trong tập kết quả

Truy cập đến 1 dòng hoặc 1 tập hợp những dòng từ vị trí hiện tại của con trỏ trong tập kết quả

Hỗ trợ sửa chữa dữ liệu ở 1 dòng nào đó

Ví dụ: Chúng ta có một danh sách sinh viên (Select), trong lập trình ta muốn có một con trỏ đến vị trí từng dòng để có

những truy cập cần thiết.

Trang 13

[ Static| Dynamic]

[ Read_only]

For select_statement

Những tham số gạch chân là mặc định

Trang 14

Giải thích

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

Global: cursor toàn cục (tồn tại trong suốt connection hoặc

đến khi bị hủy tường minh)

Static: nội dung của cursor không thay đổi trong suốt thời

gian tồn tại, trong trường hợp này cursor chỉ là read only

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

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…” )

Trang 15

2 Duyệt tuần tự mẫu tin trong kết quả

Cú pháp lệnh

Fetch [ [Next| Prior| First| Last| Absolute n| Relative n]

From Tên_cursor

[Into Tên_biến [,…n] ]

FETCH FIRST: Truy cập đến dòng đầu tiên

FETCH NEXT: Truy cập đến dòng tiếp theo Mặc định

FETCH PRIOR: Truy cập đến dòng trước dòng hiện tại của con trỏ FETCH LAST: Truy cập đến dòng cuối cùng.

FETCH ABSOLUTE n: Nếu n là số nguyên dương, nó truy cập đến

dòng thứ n Nếu n là số nguyên âm, nó truy cập đến dòng thứ n trước dòng cuối cùng của con trỏ Nếu n=0 nó truy cập tới chính dòng hiện

tại.

FETCH RELATIVE n: Nếu n là số dương, truy cập đến dòng thứ n sau

dòng hiện tại của con trỏ Nếu n là số âm, truy cập đến dòng thứ n, truy cập đến dòng thứ n trước vị trí hiện tại của con trỏ Nếu bằng 0,

truy nhập đến dòng hiện tại một lần nữa.

Trang 16

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

Là cơ sở để biết đã duyệt đến cuối cursor hay chưa

Nếu @@fetch_status =0 thì thành công con trỏ đang ở vị trí mẫu thỏa mãn điều kiện

Nếu @@fetch_status <>0 thì KHÔNG thành công con trỏ đang ở vị trí vượt qua mẫu tin cuối cùng của bảng kết quả

Trang 17

Declare cur_Masv cursor

For Select MaSV, Malop From SINHVIEN

Open cur_Masv

declare @Masv varchar(5), @Malop varchar(5)

Fetch Next From cur_Masv into @MaSV,@Malop

Update SINHVIEN Set MaSV = @Malop+@MaSV

Where MaSV = @MaSV

Ví du: Cập nhật lại giá trị MaSV = MaLop + MaSV hiện tại cho

tất cả sinh viên

Trang 18

Ví dụ: Cập nhật lại Masv thứ n là aaa

Declare cur_DSSV cursor scroll

For select MaSV From SINHVIEN

Open cur_DSSV

Declare @masv varchar(10)

Fetch Absolute 5 From cur_DSSV into @Masv

If (@@fetch_status = 0)

update SINHVIEN set masv ='aaa' where current of cur_DSSV

Deallocate cur_DSSV

Trang 19

Tóm lại các bước sử dụng biến con trỏ trong lập trình

B1 Định nghĩa Cursor từ một kết quả Select

Declare Cursor_name Cursor For select_statement

B4 Kểm tra có thành công không:

Nếu @fetch_status = 0 thì xử lý lệnh, quay lại B3

Nếu @fetch_status <> 0 thì sang B5

B5 Đóng Cursor:

CLOSE <Cursor_name>

B6 Xoá tham chiếu của Cursor:

DEALLOCATE <Cursor_name>

Trang 20

Bài tập

1 Thêm cột SBD trong bảng SV: Hãy điền SBD cho các sinh viên theo từng lớp

2 Thêm cột Docdiem trong bảng DIEMTBC, Viết

đoạn chương trình cập nhật cho cột Docdiem để đọc điểm TBC ra thành chữ tương ứng.

3 Viết đoạn chương trình phân lớp ‘CT11’ ra thành

2 lớp CT11A, CT11B có số lượng nam nữ như nhau.

Trang 21

Declare cur_SBD cursor

For Select MaSV From SINHVIEN order by Malop Open cur_SBD

Where Current Of cur_SBD

Fetch Next From cur_SBD

set @i=@i+1

End

Close cur_SBD

Deallocate cur_SDB

Trang 22

Declare cur_phanlop cursor for

select masv,Gioitinh,Malop from SINHVIEN where malop='ct11‘ order by gioitinh

open cur_phanlop

declare @malop varchar(10),@masv varchar(10),@i int

fetch next from cur_phanlop

Trang 23

IV Stored procedure (Thủ tục)

Trang 24

Danh sách tham số vào (ra)

<Tên tham số> <kiểu> [=default] [output]

Output: Chỉ định tham số ra (muốn biết giá trị của nó)

- Tên tham số đặt theo qui tắc như tên biến cục bộ

- Lệnh RETURN được sử dụng để kết thức stored procedure và trả về giá trị là một số, có thể là một biến Giá trị mặc định là Return 0

- Mỗi lệnh SELECT đặt trong stored procedure sẽ trả về 1 bảng

Trang 25

Declare @SiSo int

Select @SiSo = Count(MaSV) From SINHVIEN

Else Print N’Lớp đã đủ số sinh viên’

CREATE PROCEDURE usp_Sinhvien

@Masv varchar(10),@Ho nvarchar(30),@Ten varchar(10),

@Malop varchar(10),@Siso int =NULL Output

AS

Go

(@Masv,@Ho,@Ten,@Malop)

@Malop

Trang 26

4 Lời gọi thủ tục

          EXECUTE tên_thủ_tục  [danh_sách_các_đối_số]

 Số lượng các đối số cũng như thứ tự của chúng phải phù hợp với số lượng và thứ tự của các tham số  khi định nghĩa thủ tục         

 Nếu không xác định được thứ tự của danh sách đối thì ta viết thêm tên tham số @tên_tham_số  = giá_trị

Trang 27

Declare @ss int,@Ketqua

EXEC @Ketqua=usp_sinhvien

@masv=‘012’,@ho=N’PhanThanh’, @ten=N’Thúy’,

@Malop=’CT11’,@ss outputPrint @ss

Print @Ketqua

Trang 28

2 Viết thủ tục usp_GET_ALL_SinhvienLop: hiển thi danh sách sinh viên

gồm Masv, Malop, Ho, Ten, Gioitinh(Nam,Nữ), Ngay sinh

(dd/mm/yyyy) của lớp được chỉ định

3 Viết thủ tục usp_Phanlop để phân lớp được chỉ định

4 Viết thủ tục usp_TinhdiemTBC; xuất dữ liệu ra bảng được chỉ định

5 Viết thủ tục usp_DSNgungtiendo: đưa ra danh sách sinh viên ngừng

tiến độ học tập (có tổng số đơn vị học trình của môn học thiếu

điểm >25)

Trang 29

Alter PROC usp_Inserrt_SinhVien

@masv varchar(10), @HoTen nvarchar(30),

@Dienthoai varchar(7),@maLop varchar(10) ,Ngaysinh Date

@tbloi varchar(30)=null output

INSERT INTO SINHVIEN(Masv, HoTen, Dienthoai, MaLop)

VALUES(@Masv, @HoTen, @Dienthoai, @MaLop)

RETURN 0 /* procedure tự trả về 0 nếu không RETURN */

END

GO

Trang 30

DECLARE @kq varchar(30)

EXEC usp_Inserrt_SinhVien '002', N'Nguyễn Văn A', '7654343', 'CT11',’09/09/1987’@kq output

PRINT @kq

Trang 31

/*procedure luôn trả về 0 nếu không RETURN*/

END

GO

Trang 32

Thêm từ khóa WITH ENCRYPTION Trong lệnh Alter thủ tục

Trang 33

V Hàm (Function)

Hàm là đối tượng cơ sở dữ liệu tương tự như thủ tục Điểm

khác biệt giữa hàm và thủ tục là hàm trả về một giá trị

Giá trị trả về có thể là một bảng có được từ một câu truy vấn

Trang 34

Bài tập

1 Viết hàm Xeploai theo quy định.

2 Viết hàm hiển thị giới tính Nam, Nữ.

3 Viết hàm đọc điểm

4 Viết hàm đọc số có ba chữ số.

5 Viết hàm đọc số có nhiều chữ số.

6 Viết hàm tách tên

Trang 35

Bài tập 1: Biến vào: DIEM; Biến ra: XL

Create Function Xeploai

(@Diem numeric(4,1))Returns nvarchar(10) as

Begin

declare @xl nvarchar(10)

set @xl=case

when @Diem>=8 then N'Giỏi'

when @Diem>=7 then N'Khá'

When @Diem>=5 then N'Trung binh'

Trang 37

Function Tachten(@ht nvarchar(30)) returns nvarchar(10)

Trang 38

VI MỘT SỐ HÀM CƠ BẢN

1 Các hàm toán học:

1 ABS(x) : Trị tuyệt đối của x

2 SQRT(x) : Căn bậc hai của x

3 SQUARE( x) : x bình phương

4 POWER( y, x ) : y lũy thừa x

5 LOG(x) : Logarit của x

6 EXP(x) : Hàm mũ cơ số e của x

7 SIGN(x) : Lây dâu của số x (-1: x<0, 0: x=0, +1: x>0)

8 ROUND(x,n) : Làm tròn tới n sô thập phân.

9 CEILING( x) : Sô nguyên nhỏ nhất nhưng lớn hơn x

10 FLOOR(X) : Sô nguyên lớn nhât nhưng nhỏ hơn x

11 và các hàm lng giác: SIN, COS, TAN, ASIN, ACOS, ATAN

Trang 39

2 Các hàm xử lý chuỗi

1 ACSII( ch ) : Mã ASCII của ký tự ch

2 CHAR( n ) : Ký tự có mã ASCII là n

3 LOWER( str ) : Trả vê chuỗi chữ thường

4 UPPER(str) : Trả về chuỗi chữ hoa

5 LTRIM(str) : Trả vê chuỗi không có dấu cách bên trái

6 RTRIM(str) : Trả vê chuoi không có dấu cách bên phải

7 LEFT(str,n): Lấy n ký tự phía trái của dãy str.

8 RIGHT(str,n): Lây n ký tự phía phải của dãy str.

9 SUBSTRING(str, start, n): Lây n ký tự của dãy str kể từ vị trí

start trong dãy

10.REPLACE(str1, str2, str3): thay thế tất cả str2 trong str1 bằng str3

11.STUFF(str1, start, n, str2 ): Thay thế n ký tự trong str1 từ vị

trí start bằng chuỗi str2

12.STR( x, len [, Dec]): Chuyển sô x thành chuỗi

Trang 40

3 Hàm xử lý ngày tháng

1 GETDATE(): Cho ngày tháng năm hiện tại (Oracle: SYSDATE)

2 DAY(dd): Cho sô thứ tự ngày trong tháng của biểu thức ngày

Trang 41

6 DATEADD(datepart,number, date): Đưa ra một phần trong date

và cộng thêm thêm một số Number

7 DATEDIFF(datepart, date1, date2): Đưa ra một phần trong date2

và cộng thêm một ngày date1

Trang 42

4 Hàm chuyển đổi kiểu dữ liệu

1 CAST (biểu_thức AS kiểu_dữ_liệu)

Chuyển đổi giá trị của biểu thức sang kiểu được chỉ định

2 CONVERT(kiểu_dữ_liệu, biểu_thức [,kiểu_chuyển_đổi])

Hàm có chức năng chuyển đổi giá trị của biểu thức sang kiểu dữ

liệu được chỉ định Tham số kiểu_chuyển_đổi là một giá trị số

thường được sử dụng khi chuyển đổi giá trị kiểu ngày sang kiểu chuỗi nhằm qui định khuôn dạng dữ liệu được hiển thị và được qui định như sau:

Ngày đăng: 21/05/2021, 14:23

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm