การสร้าง Auto Increment ใน Oracle Database

Oracle Database

การสร้าง Auto Increment ใน Oracle Database

Oracle Database นั้นจะแตกต่างกับ database ทั่วไปที่ใช้กันของค่ายอื่นอย่าง mysql, PostgreSQL และ MS SQL server ที่แค่ติ๊กเลือกให้มัน auto increment ก็ได้แล้วแต่ใน oracle นั้นไม่มีครับ ไม่แน่ใจว่าเพราะความที่มันรองรับการทำงานที่ซับซ้อนมาก เลยต้องทำแบบนี้รึเปล่า

Oracle Database

โดยหลักการของมันก็คือการสร้าง sequence ขึ้นมาเพื่อเก็บจำนวนตัวเลขล่าสุดที่ทำการเพิ่มเข้าไปในฐานข้อมูลแล้ว หลังจากนั้นจะใช้ Trigger เพื่อดักเหตุการณ์ที่จะทำให้ sequence เพิ่มค่าขึ้น นั้นก็คือในการทำ auto increment ใน oracle เท่าที่ผมรู้ตอนนี้คือสร้าง sequence ขึ้นมาแล้วก็สร้าง Trigger เพื่อทำการเพิ่มค่า auto ลงไปในตาราง

เอาละมาเริ่มกันเลยดีกว่า โดยในทีนี้ขอข้ามขั้นตอนการติดตั้ง oracle database ไปนะครับ ส่วนการใช้คำสั่ง sql นั้นผมจะใช้ sql developer ส่วนใครจะใช้ sql plus ก็แล้วแต่ถนัดครับ เมื่อเปิด sql developer เข้ามาให้ไปที่ worksheet แล้วสร้าง table userlogin

[sourcecode language=”sql”]

create table userlogin( userid int,
username varchar(20),
pass varchar(20)
);

[/sourcecode]

oracle

หากใครไม่มี table ก็ให้ทำการสร้าง table ตามผมก็ได้นะครับ แต่หากใครมี table อยู่แล้วก็ให้เปลี่ยนชื่อ table ในตัวอย่างเป็นชื่อ table ของคุณได้นะครับ

จากนั้นก็ให้ทำการสร้าง sequence ก่อนโดยใช้คำสั่งต่อไปนี้

[sourcecode language=”sql”]

create sequence userid_seq
start with 1
increment by 1
nomaxvalue

[/sourcecode]

oracle

ในการรันคำสั่งก็ใช้กดปุ่มลูกศรสีเขียว สังเกตคำสั่งในการสร้าง sequence นั้นจะเริ่มด้วย 1 และทำการเพิ่มครั้งและ 1 ส่วนค่ามากสุดคือไม่มี แต่หากต้องการกำหนดค่าสูงสุดสามารถใช้คำสั่ง maxvalue ได้ครับ

ต่อจากนั้นก็สร้าง trigger เพื่อให้นำค่าใน sequence ไปใส่ ใน userid ของ table userlogin ทุกครั้งที่มีการเพิ่ม insert เข้าไป โดยมีคำสั่งดังนี้

[sourcecode language=”sql”]

create  trigger userlogin_insert
before insert on userlogin
for each row
begin
select userid_seq.nextval into :new.userid from dual;
end;
[/sourcecode]

oracle

จากคำสั่งในการสร้าง trigger สังเกตว่าจะใช้คำสั่ง before insert on userlogin คือการสั่งให้ trigger ทำงานก่อน insert ข้อมูล userlogin โดยให้ทำการนำค่าของ userid_seq คือ sequence ที่เราสร้างก่อนหน้านี้ ค่าต่อไป +1 ในใส่ให้ ค่าใหม่ของ userid ในตาราง userlogin แต่สังเกตว่า มีคำสั่ง from dual ซึ่ง ตาราง dual นั้นเป็นตารางพิเศษของ oracle โดยรายละเอียดนั้นผมก็ไม่แน่ใจครับ

เมื่อเราสร้าง sequence และ trigger แล้วก็ลองมาใส่ข้อมูลในตาราง userlogin ดูนะครับ โดยคลิกที่ตาราง userlogin จากนั้นไปที่ tab data แล้วกดปุ่ม +

oracle

ใส่ข้อมูลใน column username, pass โดยที่ column userid ปล่อยว่างไว้จากนั้นกดปุ่มถูกต้องเพื่อทำการเซฟข้อมูลจะเห็นว่า trigger จะใส่ค่า 1 ให้ auto และจะเพิ่มขึ้นที่ละ 1 ทุกครั้งที่มีการ insert ข้อมูลลง table นี้ เราสามารถกำหนด step ในการเพิ่มค่าได้โดยกำหนดใน sequence นั้นเอง

 

Leave a Reply

Your email address will not be published. Required fields are marked *