SQL (Standard Query Language)
ภาษา Standard relational database Query Language (SQL)
ภาษาที่กลายเปนภาษามาตรฐานสํ าหรับระบบฐานขอมูลคือ ภาษา Standard relational database
Query Language หรอเอสค ื ิวแอล (SQL) หรือซีควอล (SE-QUEL) ซึ่งเปนภาษาที่พัฒนาขึ้นมาโดยบริษัท
ไอบเอี ม็ ภาษา SQL (Standard Query Language) เปนสวนหนึ่งของระบบฐานขอมูลแบบรีเลชั่นเนล
(Relational Database) ทไดี่ รบความน ั ิยมมากเพราะงายตอความเขาใจ และอยูในรูปภาษาอังกฤษ ภาษา
SQL แบงออกเปน 2 สวน คือ
• ภาษาที่ใชสํ าหรับนิยามขอมูล (Data Definition Language-DDL)
• ภาษาสํ าหรับการจัดการขอมูลล (Data Manipulation Language: DML)
• ภาษาควบคุม (Control Language)
• ภาษาในการเลือกขอมูล (Data Query Language)
รูปแบบการใชคํ าสั่ง SQL สามารถใชไดเปน 2 รูปแบบ ดังนี้ คือ
• คํ าสั่ง SQL ที่ใชเรียกดูขอมูลไดทันที (Interactive SQL)
เปนการเรียกใชคํ าสั่ง SQL สั่งงานบนจอภาพ เพื่อเรียกดูขอมูลในขณะที่ทํ างานไดทันที เชน
SELECT CITY
FROM SUPPLIER
WHERE SNO = ‘SE’;
• คํ าสั่ง SQL ที่ใชเขียนรวมกันโปรแกรมอื่น ๆ (Embedded SQL)
เปนคํ าสั่ง SQL ที่ใชรวมกับคํ าสั่งของโปรแกรมภาษาตาง ๆ เชน PL/1 PASCAL ฯลฯ หรือแม
แตกับคํ าสั่งในโปรแกรมที่ระบบจัดการฐานขอมูลนั้นมีใชเฉพาะ เชน ORACLE มี PL/SQL (Procedural
Language /SQL) ที่สามารถเขียนโปรแกรมและนํ าคํ าสั่ง SQL มาเขียนรวมดวย เปนตน
ตัวอยางการใชคํ าสั่ง SQL ในภาษา PL/1
EXEC SQL SELECT CITY
INTO :XCITY
FROM SUPPLIER
WHERE SNO = ‘S4’;
หากเรามีสโตร์โพรซีเยอร์ Stored Procedure ชื่อ sp_test ที่อยู่ในฐานข้อมูล db1 แต่ต้องการเรียกใช้งานในฐานข้อมูล db2 มีวิธีเรียกใช้งานได้ง่าย ๆ โดยเราต้องระบุชื่อฐานข้อมูลขึ้นหน้าก่อนตัวอย่างเช่น
EXEC db1.dbo.sp_test(100)
เพียงแค่นี้ระบบจะไปเรียกใช้งานและประมวลผล sp_test ที่อยู่ในฐานข้อมูล db1 เป็นที่เรียบร้อย หากเราไม่ระบุ db1.dbo นำหน้าระบบจะทำการค้นหา Stored Procedure ในฐานข้อมูล db2 หากไม่พบจะแจ้ง Error ออกมา โดยรูปแบบการเรียกใช้คล้าย ๆ ก็จะคล้าย ๆ กับการเรียกใช้งานตารางหรือวิวที่อยู่ฐานข้อมูลอื่นๆ นั่นเอง
แต่หากเราต้องการที่จะสร้าง Stored Procedure และ User Defined Function ให้สามารถเรียกใช้งานได้ทุกฐานข้อมูลโดยไม่ต้องระบุชื่อฐานข้อมูลก่อน ซึ่งจะคล้าย ๆ กับ Stored Procedure ที่มีอยู่แล้วในระบบ เราก็สามารถสร้างขึ้นมาใช้งานเองได้ แต่ต้องสร้างStored Procedure และ User Defined Function ในฐานข้อมูล master เท่านั้น เมื่อสร้างเสร็จเรียบร้อยแล้วทุกฐานน้อมูลก็จะสามารถมองเห็นได้
โดยการสร้าง Stored Procedure และ User Defined Function ในฐานข้อมูล master มีหลักการตัั้งชื่อที่ต้องเป็นไปตามกฏของ SQL Server นั่นคือหากเป็นชื่อของ Stored Procedure จะต้องขึ้นต้นด้วย sp_ หากเป็น User Defined Function ก็ต้องขึ้นต้นด้วย fn_ เสมอ
และเมื่อสร้างเสร็จเรียบร้อยแล้วต้องเปลียนชื่อ owner ให้เป็น system ด้วยทุกครั้งโดยต้องใช้คำสั่ง EXEC sp_changeobjectowner ตัวอย่างการใช้งานมีดังนี้
CREATE FUNCTION fn_compute(@num1 int, @num2 int)
RETURN int
AS
BEGIN
RETURN @num1+@num2
END
EXEC sp_changeobjectowner 'fn_compute', ' system_function_schema'
Go
และหากเราต้องการแก้ไขข้อมูล Stored Procedure และ User Defined Function ที่มีอยู่ในฐานข้อมูลมาสเตอร์ก็ต้องปลดล็อกให้สามารถแก้ไขได้โดยใช้คำสั่ง EXEC sp_configure มีวิธีใชังานดังต่อไปนี้
EXEC sp_configure 'fn_compute', 1
เมื่อแก้ไขเสร็จเรียบร้อยแล้วให้แก้ไขสถานะเป็น 0 เหมือนเดิมเพื่อป้องกันการแก้ไขข้อมูลโดยไม่ได้ตั้งใจ
EXEC sp_configure 'fn_compute', 0
ในการสร้าง แก้ไข และลบ Stored Procedure และ User Defined Function ที่มีอยู่ในระบบจะต้องทำอย่างรอบคอบมากเนื่องจากฐานข้อมูล master นั้นเป็นฐานข้อมูลหลักที่ทุก ๆ ฐานข้อมูลทุกตัวมีการเรียกใช้งานอยู่ตลอดเวลา หากเราแก้ไขข้อมูลผิดพลาดแล้วอาจจะทำให้การทำงานของระบบผิดเพี้ยนไปได้ครับ