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