จากบทความที่แล้วที่ผมได้แนะนำเรื่องการสร้างฟังก์ชั่นใช้เองใน 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
- เริ่มสร้าง Function ซึ่งเราสามารถสร้าง Scalar-valued Function ได้สองวิธี ดังรูป
- เมื่อเลือกเมนูเรียบร้อย SQL Server สร้างโครงสร้าง Function ให้มา เพื่อเป็น Guideline ในการพัฒนา โดยมีรายละเอียด ดังรูป
หมายเลข 1 คือ ส่วนของ Function Declaration ที่กำหนดชื่อ และ Return Type ของ Function
หมายเลข 2 คือ กำหนดตัวแปร เพื่อเอาไว้ใช้ในการ Return
หมายเลข 3 คือ ส่วนที่เอาไว้แสดงแนวคิดการทำงานของฟังก์ชั่นต่างๆ
หมายเลข 4 คือ คำสั่งที่ใช้ Return ตัวแปรที่กำหนดไว้ในหมายเลข 2
- เมื่อเขียนคำสั่งเสร็จแล้ว ให้กด 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.