[SQL Server] การสร้าง Function ใช้เองใน Database ของเรา ตอนที่ 2(Scalar-valued Function )

จากบทความที่แล้วที่ผมได้แนะนำเรื่องการสร้างฟังก์ชั่นใช้เองใน Database (User-Defined Function)ของเรา วันนี้ผมมาแนะนำการสร้างฟังก์ชั่นรูปแบบแรก Scalar-valued Function กันนะครับ

Scalar-valued Function คือ อะไร

Scalar-valued Function คือ ฟังก์ชั่นที่คืนค่าเป็นข้อมูลชนิดพื้นฐานเพียงตัวเดียว เช่น datetime, int ยกเว้นชนิดข้อมูลแบบ text, ntext, image หรือ timestamp ที่ไม่สามารถสั่งให้คืนค่าได้ โดยการเรียกใช้สามารถเรียกใช้แบบเดียวกันกับฟังก์ที่เคยใช้งานมา โดยส่วนชื่อคอลัมน์ที่ต้องการเข้าไป เช่น SUM, Max เป็นต้น

การสร้าง Scalar-valued Function ใน MS SQL Server

  1. เริ่มสร้าง Function ซึ่งเราสามารถสร้าง Scalar-valued Function ได้สองวิธี ดังรูป
  1. เมื่อเลือกเมนูเรียบร้อย SQL Server สร้างโครงสร้าง Function ให้มา เพื่อเป็น Guideline ในการพัฒนา โดยมีรายละเอียด ดังรูป

หมายเลข 1 คือ ส่วนของ Function Declaration ที่กำหนดชื่อ และ Return Type ของ Function
หมายเลข 2 คือ กำหนดตัวแปร เพื่อเอาไว้ใช้ในการ Return
หมายเลข 3 คือ ส่วนที่เอาไว้แสดงแนวคิดการทำงานของฟังก์ชั่นต่างๆ
หมายเลข 4 คือ คำสั่งที่ใช้ Return ตัวแปรที่กำหนดไว้ในหมายเลข 2

  1. เมื่อเขียนคำสั่งเสร็จแล้ว ให้กด Execute เพื่อให้ฐานข้อมูลตรวจสอบความถูกค้องของ Syntax และเป็นการบ่อกให้ DBMS รับรู้ถึงการมีฟังก์ชั่นนี้

ตัวอย่างโจทย์

สร้างฟังก์ชั่น ShiftWorkingDay อย่างง่าย ซึ่งมีหน้าที่ในการเลื่อนวันออกไปเป็นวันทำการถัดไป เช่น ถ้าเลือกวันที่ที่ส่งเข้ามาวันอาทิตย์ ระบบต้องเลื่อนเป็นวันทำการถัดไป คือ วันจันทร์นั่นเอง โดยมี Parameter คือ pdteInputDate และ Return ข้อมูลวันที่ที่ผ่านการตรวจสอบแล้ว

-- Batch submitted through debugger: SQLQuery6.sql|7|0|C:\Users\adminping\AppData\Local\Temp\~vsBD8E.sql
-- =============================================
-- Author:		<Chatri Ngambenchawong>
-- Create date: <15-JAN-2014>
-- Description:	<ShiftWorkingDay>
-- =============================================
ALTER FUNCTION [dbo].[ShiftWorkingDay]
(
	-- Add the parameters for the function here
	@pdteInputDate date
)
RETURNS date
AS
BEGIN
	-- Declare the return variable here
	DECLARE @ldteResultDate date
	-- Add the T-SQL statements to compute the return value here
	if (datepart(dw,@pdteInputDate) = 1)
		SET @ldteResultDate = DATEADD(DAY,1,@pdteInputDate)
	Else
		SET @ldteResultDate = @pdteInputDate
	-- Return the result of the function
	RETURN @ldteResultDate
END

ผลลัพธ์

ทดสอบการเรียกใช้ฟังก์ชั่น โดยกำหนด Parameter ได้แก่

  • วันที่ 2014-01-18(วันเสาร์) ผลลัพธ์ที่ได้ ระบบไม่ Shift วัน ดังรูป
SELECT dbo.ShiftWorkingDay('2014-01-18');
GO
  • วันที่ 2014-01-19(วันอาทิตย์) ผลลัพธ์ที่ได้ ระบบ Shift วันไปเป็นวันจันทร์(2014-01-20) ดังรูป
SELECT dbo.ShiftWorkingDay('2014-01-19');
GO

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.