oracleskill

Home TUTORIAL Auto Number datatype ใน ออราเคิล

Auto Number datatype ใน ออราเคิล

Question : ตอนนี้ หนูเพิ่งหัดใช้ Oracle แต่หา data type "auto number" แบบ Microsoft Access ไม่เจอ อยากรู้ว่า Oracle มี data type auto number ไหมคะ ?

Answer : นี่เป็นคำถามของน้องที่ติดตามเวบ oracleskill.com อีเมล์ มาถามผม (แต่ขอแนะนำ ว่า ควรไปตั้งกระทู้บน เวบบอร์ด oracle forum จะดีกว่านะครับ เพราะ คนอื่นจะได้มาอ่าน ได้แชร์ความรู้ด้วย และ ในเวบบอร์ด จะมีผู้รู้ หลายๆท่าน ช่วยตอบ อาจ จะได้คำตอบ ไวกว่า รอผมตอบอีก)

การสร้างตาราง ใน Microsoft Access จะสามารถสร้าง คอลัมน์ ที่มี datatype ชนิดหนึ่ง คือ "auto number" data type ชนิดนี้ เมื่อมีการใส่ข้อมูล แถวใหม่ ลงในตาราง จะใส่หมายเลขลงในคอลัมน์นั้นๆ ให้โดยอัตโนมัติ เรียงลำดับ เช่น 1,2 ,3, ... ไม่ซ้ำกัน โดยที่เราไม่จำเป็นต้องสั่ง insert หมายเลขเอง มีประโยชน์ คือ เรามักเอาไว้เป็น running number อัตโนมัติ หรือ เอาไว้ generate เป็น Primary Key ... มันก็สะดวกดี นะครับ

Auto Number ใน Microsoft Access

 

สำหรับ ออราเคิล แล้ว ไม่มี data type แบบนี้ให้ -*-
แต่ ออราเคิล จะมองเป็น Database Object ชนิดหนึ่ง ชื่อว่า "SEQUENCE" แล้ว เอา sequence ตัวนี้ ไป INSERT เป็นข้อมูล ในตารางอีกที โดยจะ INSERT เป็นหมายเลข ลำดับที่ไม่ซ้ำกันให้

เรามาดูกันครับ ว่าเราจะสร้าง SEQUENCE และ นำ SEQUENCE ไปใช้เป็น Auto Number แบบ Microsoft Access ได้ยังไง

เริ่ม แรก เราสร้างตาราง ขึ้นมาก่อน โดยสมมติว่า คอลัมน์ order_no จะให้เป็น Auto Number กล่าวคือ ทำให้เกิด running number เรียงกันไป แบบอัตโนมัติ ดังนั้น data type ของ order_no จึงต้องสร้างเป็น NUMBER

Create Table โดย order_no เป็น running number

จากนั้น เราก็สร้าง SEQUENCE ขึ้นมา ด้วยคำสั่งดังนี้ 

Create SEQUENCE command line

 

คำอธิบาย :
CREATE SEQUENCE order_no_seq : สร้าง SEQUNECE ขึ้นมา ตั้งชื่อในสูติบัตรว่า order_no_seq
START WITH 1 : เริ่มใส่ค่าครั้งแรก คือ เลข 1
INCREMENT BY 1 : ให้เพิ่มค่าในการใส่ครั้งต่อไป เพิ่มขึ้นทีละ 1
MAXVALUE 99999 : ให้ค่าสูงสุด ที่เกิดขึ้นได้ คือ 99999 (มากกว่านี้ จะเกิน NUMBER(5) ครับ)
NOCYCLE : เมื่อค่าถึงค่าสุงสุด (MAXVALUE 99999) แล้ว ห้ามเวียนเทียน กลับไปเกิดเลข 1 ใหม่
NOCACHE : ไม่ต้อง เอาหมายเลข (โดย default 20 หมายเลข) ไปเก็บในหน่วยความจำ ก่อน การเก็บ ตัวเลขไว้ใน หน่วยความจำ จะทำให้การ insert เร็วขึ้น แต่ถ้าเตะ ปลั๊กหลุด เครื่องดับ ก็จะทำให้ หมายเลขที่เก็บไว้ หายไปเลย เพราะถือว่า ถูกใช้ไปแล้ว

เวลาเอา SEQUENCE ไปใช้งาน เอาไปใช้ในการ INSERT ข้อมูล ทำได้ดังรูป

insert auto number using sequence

order_no_seq.NEXTVAL คือ ให้นำค่าตัวเลขถัดไป ( Next Value ) ของ sequence ชื่อ order_no_seq มาใส่ ให้กับ คอลัมน์ order_no

เมื่อเราดูข้อมูลในตาราง หลังจากใส่ข้อมูลแล้ว จะเห็นว่า คอลัมน์ order_no จะเกิดหมายเลขอัตโนมัติ เรียงกัน

Result after using insert SEQUENCE