นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน
อ่าน: 3234
ความเห็น: 0

Auto Increment ใน Oracle

Auto Increment ใน Oracle

ใน MySQL เราสามารถสร้าง Field ที่มีคุณสมบัติ Auto-Increment ได้ กล่าวคือ เมื่อเพิ่ม Record ใหม่เข้าไป ระบบจะสร้างค่าใหม่ ไม่ซ้ำเดิม และเพิ่มขึ้นเรื่อยๆให้ได้

แต่ใน Oracle ต้องสร้าง Sequence และสร้าง Trigger เพื่อให้สร้าง Auto Increment ให้ ซึ่งมีข้อดีกว่าคือ
เราสามารถกำหนดรูปแบบการเพิ่มขึ้นได้มากขึ้น เช่น ค่ารหัสนักเรียน

  1. Field นี้มีความยาว 8 ตัวอักษร
  2. มีตัว s นำหน้า
  3. ต้องมีการเติมเต็มค่าด้วยเลข 0 (Padding)เช่น s0000001, s0000002 เป็นต้น

ขั้นตอนคือ

1. สร้าง Sequence ด้วยคำสั่ง

CREATE SEQUENCE DBNAME.TABLENAME_SQ
START WITH 1
INCREMENT BY 1

          โดย DBNAME คือชื่อ Database และ TABLENAME คือชื่อ Table ที่จะสร้าง Sequence (สื่อความหมายถึงชื่อ Sequence) เริ่มต้นจาก 1 และเพิ่มขึ้นทีละ 1

2. สร้าง Trigger ด้วยคำสั่ง

CREATE OR REPLACE TRIGGER DBNAME.TABLENAME_ID_AUTO
BEFORE INSERT
ON DBNAME.TABLENAME
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpVar NUMBER;

BEGIN
   tmpVar := 0;

   SELECT TABLENAME_SQ.NEXTVAL INTO tmpVar FROM dual;
   :NEW.ID := CONCAT('s' ,lpad( tmpVar,7,'0'));


   EXCEPTION
     WHEN OTHERS THEN
       -- Consider logging the error and then re-raise
       RAISE;
END TABLENAME_ID_AUTO;

ขยายความ

   SELECT TABLENAME_SQ.NEXTVAL INTO tmpVar FROM dual;
   :NEW.ID := CONCAT('s' ,lpad( tmpVar,7,'0'));

หมายถึง ดึงเอาค่า NEXTVAL จาก Sequence 'TABLENAME_SQ' มาใส่ตัวแปรชื่อ tmpVar

จากนั้นบอกว่า :NEW.ID (ค่าใหม่ของ Field ชื่อ ID)  มีค่าเป็น

  • CONCAT คือการเชื่อมต่อข้อความ ในที่นี้คือตัวอักษร 's' และ ..
  • lpad คือ Left Padding ซึ่งหมายถึง เอาค่าใหม่จากตัวแปร tmpVar มาเติมเต็มให้ครบ 7 ตัวอักษร ด้วยตัวอักษร '0' จากทางซ้าย
ผลที่ได้คือ เมื่อเพิ่มค่าใหม่เข้าไปใน TABLENAME ก็จะสร้างค่าใน Field 'ID' ด้วยค่า 's0000001' และเพิ่มขึ้นไปเรื่อยๆ 
หมวดหมู่บันทึก: เรื่องทั่วไป
คำสำคัญ (keywords): auto-increment  oracle  sequence  trigger
สัญญาอนุญาต: สงวนสิทธิ์ทุกประการ Copyright
สร้าง: 29 พฤษภาคม 2553 15:24 แก้ไข: 29 พฤษภาคม 2553 16:06 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 3.237.94.109
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ