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

hệ quản trị csdl sql server - chương 9 function

14 783 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 14
Dung lượng 127,29 KB

Nội dung

Điểm khác biệt giữa hàm và thủ tục là: • Hàm trả về một giá trị vô hướng scalar value hoặc một bảng dữ liệu.. II- Tạo hàm trả về giá trị vô hướng Scalar:II- Tạo hàm trả về giá trị vô hướ

Trang 1

Chương 9:

FUNCTION

Giáo viên: Tạ Thúc Nhu Khoa CNTT trường ĐH Lạc Hồng

HỆ QUẢN TRỊ CSDL

SQL SERVER

Trang 2

I- Khái niệm:

I- Khái niệm:

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ị vô hướng (scalar value) hoặc một bảng

dữ liệu Điều này cho phép ta sử dụng hàm trong biểu thức hoặc trong mệnh đề FROM

• Hàm không có tham số Output

Trang 3

II- Tạo hàm trả về giá trị vô hướng (Scalar):

II- Tạo hàm trả về giá trị vô hướng (Scalar):

CREATE FUNCTION tên_hàm ([danh_sách_tham_số])

RETURNS <kiểu dữ liệu trả về của hàm>

AS

BEGIN

Các_câu_lệnh_của_hàm

RETURN [<giá_trị>]

END

Hàm không trả về giá trị kiểu timestamp.

Trang 4

Ví dụ: hàm trả về thứ trong tuần

Ví dụ: hàm trả về thứ trong tuần

CREATE FUNCTION func_Thu(@ngay DATETIME)

RETURNS NVARCHAR(10)

AS

BEGIN

DECLARE @S NVARCHAR(10)

SELECT @S = CASE DATEPART(DW,@ngay)

WHEN 1 THEN N'Chủ nhật' WHEN 2 THEN N'Thứ hai' WHEN 3 THEN N'Thứ ba' WHEN 4 THEN N'Thứ tư' WHEN 5 THEN N'Thứ năm' WHEN 6 THEN N'Thứ sáu' ELSE N'Thứ bảy'

END

RETURN @S /* Trị trả về của hàm */

Trang 5

Gọi thực hiện hàm Scalar

Gọi thực hiện hàm Scalar

Trước tên hàm ta phải chỉ định thêm dbo (database owner)

Ví dụ:

- Gọi hàm trong phát biểu Select

SELECT SoHD, dbo.func_Thu (NGAYHD)+ ', ' + Convert (VarChar,NgayHD,103)

FROM HoaDon

- Gọi hàm trong phát biểu EXEC

DECLARE @Thu int

Exec @Thu = dbo.func_Thu ‘5/15/2009’

Print @Thu

Trang 6

III- Tạo hàm trả về một bảng dữ liệu

III- Tạo hàm trả về một bảng dữ liệu

Có 2 loại hàm trả về một bảng dữ liệu:

– Hàm nội tuyến (Inline table-valued functions)

– Hàm nhiều phát biểu (Multistatement table-valued

functions)

Hàm trả về bảng dữ liệu có thể được sử dụng trong mệnh

đề FROM

Khi gọi hàm trả về bảng dữ liệu không cần chỉ định tên

người dùng như hàm Scalar

Trang 7

1- Tạo hàm nội tuyến:

(Inline table-valued functions)

1- Tạo hàm nội tuyến:

(Inline table-valued functions)

CREATE FUNCTION tên_hàm ([danh_sách_tham_số])

RETURNS TABLE

AS

RETURN (câu_lệnh_select)

Trang 8

Ví dụ: Hàm trả về bảng chứa MaMH, số

lượng mỗi mặt hàng đã bán từ một ngày

Ví dụ: Hàm trả về bảng chứa MaMH, số

lượng mỗi mặt hàng đã bán từ một ngày

CREATE FUNCTION func_banhang(@Ngay DateTime)

RETURNS TABLE

AS

RETURN ( SELECT MaMH,

SUM (ISNULL(SL,0)) AS TongSL FROM CTHD Inner Join HoaDon hd

On CTHD.SoHD=hd.SoHD

Where NgayHD >= @Ngay GROUP BY MaMH )

Trang 9

Sử dụng hàm đã định nghĩa để tính số tồn ở

đầu một tháng nào đó:

Sử dụng hàm đã định nghĩa để tính số tồn ở

đầu một tháng nào đó:

SELECT a.MaMH, a.TenMH, SoTon - TongSL

FROM MatHang a INNER JOIN func_banhang ('2007/5/1') b

ON a.MaMH=b.MaMH

Trang 10

2- Hàm nhiều phát biểu:

(Multistatement table-valued functions)

2- Hàm nhiều phát biểu:

(Multistatement table-valued functions)

CREATE FUNCTION tên_hàm([danh_sách_tham_số])

RETURNS @biến_bảng TABLE (cấu_trúc_ bảng)

AS

BEGIN

các_câu_lệnh_trong_thân_hàm

RETURN

END

Ví dụ: Xây dựng hàm tạo bảng chứa số mặt hàng trong từng

loại hàng nếu MaLH=0, ngược lại chỉ hiển thị số mặt hàng

của loại hàng đã chỉ định.

Trang 11

Ví dụ:

Ví dụ:

CREATE FUNCTION Func_TongMH(@MaLH SMALLINT = 0 )

RETURNS @bangthongke TABLE (MaLH NVARCHAR(5),

TenLH NVARCHAR(50), TongSoMH INT ) AS

BEGIN

IF @MaLH=0

INSERT @bangthongke SELECT lh.MaLH,TenLH,COUNT(*) FROM LoaiHang lh INNER JOIN MatHang mh ON lh.MaLH=mh.MaLH GROUP BY lh.MaLH,TenLH

ELSE

INSERT @bangthongke SELECT lh.MaLH,TenLH,COUNT(*) FROM LoaiHang lh INNER JOIN MatHang mh ON lh.MaLH=mh.MaLH WHERE lh.MaLH = @MaLH GROUP BY lh.MaLH,TenLH

RETURN /*Trả kết quả về cho hàm*/

Trang 12

Thực hiện hàm

Thực hiện hàm

Thống kê tổng số mặt hàng của loại hàng mã số 25:

SELECT * FROM func_TongMH (25)

Sử dụng giá trị mặc định của tham số:

SELECT * FROM func_TongSV ( DEFAULT )

Cho ta biết tổng số mặt hàng hiện có của mỗi loại hàng

Trang 13

V- Sửa Xóa Hàm:

V- Sửa Xóa Hàm:

1 Đổi Tên hàm:

sp_Rename <OldName>, <NewName>

2 Xóa hàm:

DROP FUNCTION <spName>

3 Thay đổi nội dung hàm:

ALTER FUNCTION func_Name ([danh_sách_tham_số])

RETURNS <kiểu dữ liệu trả về của hàm>

AS

BEGIN

Các_câu_lệnh_của_hàm

RETURN [<giá_trị>]

END

Trang 14

V- Xem Thông Tin Hàm:

1 Liệt kê danh sách hàm trong CSDL hiện hành:

Select * From Sys.Objects

Where Type In (‘ FN ’, ' IF ', ' TF ')

2 Liệt kê danh sách tham số của thủ tục:

Select * From sys.Parameters

Where Object_ID = Object_ID (' func_Thu ‘)

3 Xem nội dung thủ tục: SP_HELPTEXT ‘func_Name’

Ngày đăng: 06/07/2014, 04:16

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w