[DB2] Auto Increment

ดอง Blog ไว้นาน เนื่องจากถึงโค้งสุดท้ายของ Project Treasury ที่ได้ทำกับทางออมสินแล้ว วันนี้ขอเขียนต่อให้เสร็จเลยและกัน จะได้ไปเก็บตัว DataSet ต่อ สำหรับคนที่ใช้งาน DB2 อาจจะสงสัยว่ามันมี Auto Increment แบบ MySQL หรือป่าวครับ คำตอบมีครับ โดยสามารถกำหนดเพิ่ม ดังนี้ครับ

GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)
โดยคำสั่งข้างต้น คือ การกำหนดให้ระบบสร้างตัวเลขที่ UNIQUE(IDENTITY) ทุกครั้ง โดยให้เริ่มจาก 1 และเพิ่มขึ้นที่ละ 1 ครับ สำหรับตัวอย่างคำสั่งเต็มที่ใช้งานจริมี ดังนี้ครับ โดยเป็นการกำหนดให้ Column ID เป็นแบบ Auto Increment ครับ
SET CURRENT SCHEMA = INVEST;

CREATE TABLE INVEST.DSET_BOTTEMPLATE (
   ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1),
   GROUPID INTEGER NOT NULL,
   BOTCODE VARCHAR(30),
   SECTIONCODE VARCHAR(30),
   BOTNAME VARCHAR(300),
   PARENTBOTCODE VARCHAR(30),
   LEVELS INTEGER,
   PRIORITY INTEGER,
   BONANZAFIELD VARCHAR(50),
   CONDITION1 VARCHAR(50),
   VALUEOFCONDITION1 VARCHAR(500),
   CONDITIONOPERATOR VARCHAR(10),
   CONDITION2 VARCHAR(50),
   VALUEOFCONDITION2 INTEGER,
   ACTIVEFLAG CHARACTER(1),
   ACTIONFLAG CHARACTER(1),
   CREATETIME TIMESTAMP NOT NULL,
   CREATEBY INTEGER,
   CREATEDUSER VARCHAR(30),
   PROVETIME TIMESTAMP,
   PROVEBY INTEGER,
   APPROVEDUSER VARCHAR(30),
   MODIFIEDDATE TIMESTAMP,
   MODIFIEDID INTEGER,
   MODIFIEDUSER VARCHAR(30)
);

ALTER TABLE INVEST.DSET_BOTTEMPLATE
   DATA CAPTURE NONE
   PCTFREE 0
   LOCKSIZE ROW
   APPEND OFF
   NOT VOLATILE;

COMMENT ON INVEST.DSET_BOTTEMPLATE (
   ID IS 'Auto Increment',
   GROUPID IS 'Template for Each Panel',
   SECTIONCODE IS 'eg. 4 / 4.1 / 4.1.1',
   BONANZAFIELD IS 'BONANZA DTO PROPERTY NAME',
   CONDITION1 IS 'DTO Name',
   VALUEOFCONDITION1 IS 'Can be multi value by adding , between each value such as 1,2',
   CONDITIONOPERATOR IS 'Can be AND, OR',
   CONDITION2 IS 'DTO Name' );

COMMIT;

RUNSTATS ON TABLE INVEST.DSET_BOTTEMPLATE
ALLOW WRITE ACCESS;

SET CURRENT SCHEMA = "invest";

COMMIT;

สำหรับการ import ข้อมูลด้วย DB2MOVE แนะนำให้เลือก Option ตอน Create Table เป็น GENERATE BY DEFAULT แทน GENERATED ALWAYS เพราะ GENERATE BY DEFAULT สามารถยอมให้เอาข้อมูล import เข้า Table ได้ แต่ต้องไป SET ค่า Auto Increment ใหม่ ด้วยคำสั่ง

--ALTER TABLE tablename ALTER COLUMN columnname RESTART WITH constant
ALTER TABLE INVEST.DSET_BOTTEMPLATE ALTER COLUMN ID RESTART WITH 84;

แต่ถ้าอยากจัดการเองทั้งหมดสามารถใช้ GENERATEDOVERRIDE ได้


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.