การประยุกต์ใช้ Sequence เพื่อสร้างตัวเลข Automatic ให้กับ Table ใน Oracle Database
หน้าแรก Oracle การประยุกต์ใช้ Sequence เพื่อสร้างตัวเลข Automatic ให้กับ Table ใน Oracle Database
บางครั้งการทำงานเกี่ยวกับการจัดเก็บข้อมูลลง Table จะมีข้อมูลบางส่วนที่ถูกจัดเก็บแบบ Sequence ซึ่งส่วนใหญ่จะเป็นข้อมูลจำพวก Id ต่างๆ ถ้าเป็น Access ก็จะมี Auto running number ให้ หรือ worst case เราก็จะ Select Id ล่าสุดมา แล้วบวกเข้าไป 1 แล้วจัดเก็บลงไปอีกที
ใน Article นี้เราจะแนะนำวิธีการทำงานอีกแบบหนึ่ง ซึ่งสะดวกกว่า นั่นคือ การใช้ Sequence และ Trigger ซึ่งเป็น Utility หนึ่งที่ Oracle มีไว้ให้ใช้งาน
ขั้นตอนแรก เราสร้าง Table ที่มีการเก็บข้อมูลแบบ Sequence ขึ้นมาก่อน ดังตัวอย่างข้างล่าง Table ตัวอย่างที่สร้างขึ้นมาเป็น Table เก็บข้อมูลของ Customers โดยจะมี Field ชื่อ id มี type เป็น number และกำหนด constraint ไว้ให้เป็น primary key ชื่อ pk_cust
create table customers ( |
เมื่อเราสร้าง Table ดังตัวอย่างข้างบนแล้ว ขั้นตอนต่อไป คือ ทำการสร้าง Sequence ซึ่งในตัวอย่างนี้ เราจะสร้าง Sequence ชื่อ customers_seq โดยใช้ command นี้
|
ขั้นต่อไป เพื่อความสะดวก และง่ายต่อการจัดเก็บข้อมูลลง Table นี้ เราก็สร้าง Trigger ขึ้นมาตัวหนึ่ง ให้ทำหน้าที่ check ว่ามีการ insert ข้อมูลลง Table customers หรือไม่ ถ้ามีการ Insert ข้อมูลลง Table customers ตัว trigger นี้จะ run sequence ของ field id ใน Table customers ให้
ดังตัวอย่างในนี้ เราจะสร้าง Trigger ชื่อ customers_ins_trig ให้คอย check ว่าก่อนที่จะ insert ข้อมูลลง Table customers ให้ไป select ค่า sequence ต่อไปของ id ที่มีอยู่ แล้วนำไปจัดเก็บไว้ในค่า seq_val ที่เรา declare ไว้ หลังจากนั้นก็ assign ค่า id ใหม่ให้เท่ากับค่า seq_val นี้
create or replace trigger customers_ins_trig |
เมื่อจะ Insert ข้อมูลลง Table customers เราก็ไม่ต้องใส่ค่า id เอง ตัว Trigger จะทำงานให้เราอัตโนมัติ
ทดสอบการทำงานของ Sequence และ Trigger โดย Insert ข้อมูลลง Table customers ดังตัวอย่างนี้
|
จะสังเกตว่า เราไม่ต้องใส่ค่า id แต่ถ้าเรา Select ข้อมูลออกมา ค่า id จะ run sequence ให้อย่างถูกต้อง
เท่านี้เราก็สามารถ Insert ข้อมูลลง Table customers ที่มีการ run sequence ของ field id โดยที่เราไม่ต้องไปเขียน code ที่ front-end อีก
ขึ้นไปด้านบน
