[DB2] แปลง default current_timestamp on update current_timestamp ใน MySQL มาเป็น DB2

วันนี้ผมได้เอา Application ที่ทำด้วย C#, Java บน MySQL ย้ายมาลองกับ Database DB2(DB2 มันกิน Resource เยอะ 555) มาที่เครื่อง Developer กลาง ด้วยความขี้เกียจผมเลย Export Script จากตัว MySQL Workbench ปรากฏว่าระบบ Generate Script แปลกมาให้ ดังนี้

CREATE TABLE PORTFOLIO_PERFORMANCE (
VALUE_DATE TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
...
);

โดยเจ้า DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP คือ ให้ตัว DBMS update ทุกครั้งที่มีการแก้ไขข้อมูลใน ROW นั้นๆ

ถึงแม้ว่างานของผม จะไม่ได้ใช้คำสั่งแนวๆนี้ครับ แต่ไหนๆสงสัยแล้ว ผมเลยลองหาข้อมูล  และขอแปะไว้ใน Blog ว่าเวลาแปลงเป็น DB2 ต้องใช้คำสั่ง "GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP" ตามตัวอย่าง ดังนี้ครับ

CREATE TABLE PORTFOLIO_PERFORMANCE (
VALUE_DATE TIMESTAMP NOT NULL GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,
...
);

หมายเหตุ: คำสั่ง  "GENERATED ALWAYS FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP" มีข้อควรระวัง ดังนี้ครับ

  • คำสั่งนี้สามารถใช้งานได้ตั้งแต่ DB2 9.x หาก Version ต่ำกว่านั้น ต้องใช้ Trigger ช่วย หรือ Set ค่ามาจาก Application ของเราครับ
  • ถ้าใช้คำสั่งนี้ไปใน Column แล้ว จะไม่สามารถกำหนด Primay Key ให้กับ Column นั้นได้ครับ

สำหรับใครที่ต้องการ convert งานบน Database อื่นๆไปใช้งานบน DB2 สามารถอ่านบทความนี้ ที่ผมลอง Convert จาก MS SQL Server ไป ยัง DB2 ประกอบได้ครับ


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.