สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

Store Procedure

อยากแก้ปัญหา ของโปรแกรม ที่ใช้ SQL Server กับ PHP เลยลองหาข้อมูลมาแชร์กัน เกี่ยวกับ Store Procedure
Store Procedure คืออะไร?
     หลายคนถามว่า Store Procedure คืออะไร? ผมก็จะขอนิยามความหมายซักนิดนะครับ Store Procedure นั้นเป็นโปรแกรมที่เก็บอยู่ในฐานข้อมูลนั่นเอง ซึ่งการจะเขียน Store procedure นั้นเราจะต้องดูด้วยว่า โปรแกรมฐานข้อมูล ที่เราใช้อยู่นั้นมี ส่วนของ Store procedure อยู่ด้วยหรือเปล่า ส่วนใหญ่จะมีกับฐานข้อมูลใหญ่ เช่น Oracle , Ms sql server , Mysql เวอร์ชั่นใหม่ๆ และอื่นๆ และ Store Procedure  ยังหมายถึง การเขียน sql ฝังเอาใว้ในส่วนของ server  แต่มันถูกสร้างในฐานข้อมูลซึ่งเวลาเรียกใช้มันจะถูก Execte ไว้อยู่แล้วทำให้ทำงานได้เร็วกว่าการใช้คำสั่ง Sql ธรรมดา
ทำไมเราถึงจำเป็นต้องใช้ Store Procedure
     ถามว่าทำไมต้องใช้ อันนี้ที่จริงแล้ว ถ้าไม่ใช้ เราก็ยังสามารถเขียนโปรแกรม ติดต่อดาต้าเบสดึงข้อมูลได้เหมือนกัน ถ้าเรา ใช้คำสั่ง select * from table ดึงข้อมูลเพียง table เดียวคำสั่งสั้นๆ คงไม่เห็นถึงความแตกต่างเท่าไหร่ แต่เมื่อไหร่ ที่ต้องมีการทำงาน ในหลายๆ table พร้อมๆกัน ซัก 4-5 table เราต้อง join table อีกเพียบ หรืออาจจะมี sub query อยู่ด้วย ถ้าเมื่อไหร่ เราต้องทำงานแบบนี้ การส่งคำสั่ง Query ปริมาณมหาศาล ทำให้เกิด Traffic ระหว่าง application กับ database ขนาดใหญ่มาก และส่งผลให้ โปรแกรมเราทำงานช้าจนน่าเกลียดเลยทีเดียว

 

แต่หากเราใช้ store procedure ในการดึงข้อมูล จะลดปัญหา Traffic ไปได้มาก เนื่องจาก Store Procedure นั้นเป็น Database object ที่จะเก็บในรูปแบบ Compile แล้วและมีการทำงานแบบ Sql Statement เรียบร้อย การทำงานจะตกอยู่กับ database server ดังนั้นเราจึงสามารถใช้คำสั่ง Query ได้หลายตัวพร้อมๆกัน เพื่อให้ได้ผลลัพธ์ตามที่เราต้องการ จึงทำให้ performance ของโปรแกรมเราดีขึ้นอย่างมากมาย

การเขียน Store procedure ใน Ms Sql Server นั้นเราจะใช้ภาษา T-sql ในการเขียน ซึ่งจิงๆแล้วก็เหมือนกันเขียน Query พวก select , insert , update , delete นั่นแหละครับ เพียงแต่ T-sql นั้นมี Control Structure พวก If , Case When , While และอื่นๆอยู่ด้วยนะครับ ทำให้เราสามารถเขียนโปรแกรมบนฐานข้อมูลได้สะดวกมากมายยิ่งขึ้น

ประเภทของ Store Procedure นั้นมี 3 ประเภทคือ
1. System Store Procedure คือ Store Procedure ของระบบ เช่น sp_helpdb ใช้เพื่อดูรายละเอียดของฐานข้อมูล เป็น Store procedure ที่มีอยู่แล้วในระบบ
2. Extended Store Procedure เช่น xp_cmdshell
3. User Store Procedure คือ Store procedure ที่เราสร้างขึ้นมาใช้งานเอง

ในที่นี้ผมจะขออ้างอิง ฐานข้อมูล Ms Sql Server นะครับเนื่องจากเป็นฐานข้อมูลที่ผมถนัด และที่เราจะอธิบายคือการ สร้าง User Store procedure
ขั้นแรก เราต้องเตรียมฐานข้อมูลและสร้าง ตารางตัวอย่างพร้อมข้อมูลไว้สำหรับการทดสอบนะครับ ให้ใช้คำสั่ง Sql ด้านล่างนี้ในการสร้าง table และ ข้อมูลทดสอบ
สร้าง ตาราง และข้อมูลที่ใช้ในตัวอย่าง

  1. – สร้าง table tbl_department ทดสอบ
  2. CREATE TABLE [dbo].[tbl_department](
  3. [dep_code] [varchar](2) COLLATE Thai_CI_AS NOT NULL,
  4. [dep_name] [varchar](50) COLLATE Thai_CI_AS NULL,
  5. CONSTRAINT [PK_tbl_department] PRIMARY KEY CLUSTERED
  6. (
  7. [dep_code] ASC
  8. )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
  9. ) ON [PRIMARY]
  10. – เพิ่มข้อมูลทดสอบใน tbl_department
  11. insert into tbl_department values (’01′,’Account’)
  12. insert into tbl_department values (’02′,’Marketing’)
  13. insert into tbl_department values (’03′,’Information Technology’)
  14.  
  15. – สร้าง table tbl_employee
  16. CREATE TABLE [dbo].[tbl_employee](
  17. [emp_code] [varchar](5) COLLATE Thai_CI_AS NOT NULL,
  18. [emp_name] [varchar](50) COLLATE Thai_CI_AS NULL,
  19. [emp_surname] [varchar](50) COLLATE Thai_CI_AS NULL,
  20. [emp_tel] [varchar](20) COLLATE Thai_CI_AS NULL,
  21. [emp_email] [varchar](60) COLLATE Thai_CI_AS NULL,
  22. [dep_code] [varchar](2) COLLATE Thai_CI_AS NULL,
  23. CONSTRAINT [PK_tbl_employee] PRIMARY KEY CLUSTERED
  24. (
  25. [emp_code] ASC
  26. )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
  27. ) ON [PRIMARY]
  28. – เพิ่มข้อมูลทดสอบใน tbl_employee
  29. insert into tbl_employee values (‘E0001′,’ศรีสุดา’,'สง่า’,’081627xxxx’,'<?xml:namespace prefix = st1 ns = “urn:schemas-microsoft-com:office:smarttags” />srisuda.s@rmutsv.ac.th’,’03′)
  30. insert into tbl_employee values (‘E0002′,’สยาม’,'จันทาพูน’,’081761xxxx’,'siam.j@rmutsv.ac.th’,’01′)
 
อ้างอิง [Online] Url: http://jagdy.it-devzone.com/?cat=26