วันนี้ผมได้เอา 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.