[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 แปลกมาให้ ดังนี้

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

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

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

หมายเหตุ: ถ้าใช้คำสั่ง  "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 to your email.