1. Trang chủ
  2. » Thể loại khác

T SQL PROGRAMING KHOA CÔNG NGHỆ THÔNG TIN

42 13 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

Tiêu đề T-SQL Programming
Trường học Khoa Công Nghệ Thông Tin
Chuyên ngành T-SQL Programming
Thể loại document
Đị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

PowerPoint Template LOGO Chương 4Chương 4 T SQL PROGRAMINGT SQL PROGRAMING KHOA CÔNG NGHỆ THÔNG TIN 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ỉ[.]

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 5

2 Biến toàn cục:

Định nghĩa: là biến được sử dụng bất kỳ đâu trong hệ thống

Trong SQL biến toàn cục Là các biến hệ thống do SQL

Server cung cấp

SQL tự cập nhật giá trị cho các biến này, Người sử dụng

không thể gán giá trị trực tiếp cho biến này

Bản chất là 1 hàm (function) và bắt đầu bằng ký tự @@

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

[ Else kết_quả_khác]

End

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’ trong bảng SINHVIEN

Declare @ht varchar(30),@ten varchar(10), @L int, @i int,@j int,@kt varchar(10)

set @ht=(select hoten from SINHVIEN Where MaSV='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

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

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 output Print @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: 19/04/2022, 12:42

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w