วันอังคารที่ 22 กันยายน พ.ศ. 2552

สร้าง Table พักด้วย Global Temporary Table

การพัฒนาแอพพลิเคชั่นบางโปรแกรมที่มีความซับซ้อนมาก ๆ อาจจะมีความจำเป็นที่ต้องใช้ Table ชั่วคราวเพื่อพักข้อมูลที่ได้จากการปะมวลผลไว้ก่อน แล้วจึงนำข้อมูลใน Table พักนั้นไปประมวลผลทำงานต่อจนจบกระบวนการของโปรแกรม หลังจากนั้นเราก็จะทำการลบข้อมูลใน Table พักชั่วคราวนั้นทิ้งไปเพื่อไม่ให้ข้อมูลเหล่านั้นเป็นขยะค้างอยู่ในระบบ หากคิดกันแบบง่าย ๆ ก็ทำได้โดยสร้าง Table ขึ้นมารองรับและเมื่อใช้งานเสร็จก็ลบข้อมูลทิ้งไป แต่ในชีวิตจริงแล้วแอพพลิเคชั่นที่ใช้งานจะมีผู้ใช้หลายคนทำงานพร้อม ๆ กันเป็น multiuser ทำให้การใช้ Table พักยุ่งยากยิ่งขึ้นเนื่องจากต้องคอยตรวจสอบข้อมูลใน Table พักเพื่อให้แน่ใจว่าเป็นข้อมูลของผู้ใช้ในแต่ละ session แยกจากกันและข้อมูลไม่ตีกัน

Global Temporary Table คือคำตอบสุดท้ายที่ออราเคิลตั้งแต่ 8i เป็นต้นมาได้ให้ฟีเจอร์นี้มาเพื่อใช้สำหรับเป็นที่พักข้อมูลชั่วคราว โดยที่ผู้ใช้งานในแต่ละ session จะเห็นเฉพาะข้อมูลของตัวเอง และที่สะดวกไปกว่านั้นก็คือ เมื่อผู้ใช้ออกจากระบบหรือจบ session ออราเคิลก็จะทำการลบข้อมูลพักใน session นั้น ๆ ให้โดยอัตโนมัติ โดยมีรูปแบบคำสั่งที่ใช้ในการสร้าง table ดังนี้

create global temporary table ...table_name... (column1 data_type, column2 data_type,...)

โดยคำสั่งนี้มี option ให้เลือก 2 option คือ

  • on commit delete rows ใช้ option นี้เมื่อ commit จบ transaction แล้วข้อมูลใน table จะถูกลบทิ้งทันที โดย option นี้จะถูกระบุเป็นค่า default ถ้าไม่มีการระบุ
  • on commit preserve rows ทางเลือกนี้จะยังคงเก็บข้อมูลไว้ใน table แม้ว่าจะจบ transaction ไปแล้วก็ตาม แต่ข้อมูลจะถูกลบทิ้งเมื่อจบ session

ตัวอย่างเช่น

create global temporary table gt_temp (col1 varchar2(10),col2 varchar2(20)) on commit delete rows;

ต่อไปนี้เราก็จะได้ใช้งาน table พักโดยสามารถใช้คำสั่ง insert,update,delete เพื่อจัดการกับข้อมูล และสามารถทำ index ได้เหมือนกับ table ปกติโดยที่ไม่ต้องมาคอยจัดการลบข้อมูลทิ้งอีกต่อไป

ไม่มีความคิดเห็น:

แสดงความคิดเห็น