Try   HackMD

[Oracle]創建流水號

tags: oracle trigger sequence database SQL Oracle SQL Developer

2019 11 06

SQL Developer version: 19.1.0.094.2042


創表格 Table

CREATE TABLE TABLE 名稱 ( "ID" NUMBER(10, 0) NOT NULL ENABLE, "DATA" VARCHAR2(22 BYTE) NOT NULL ENABLE, "D_INSERTTIME" NOT NULL ENABLE, ) SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "WMS_MAIN"; COMMENT ON COLUMN "WMS"."WMS_OrderStatusReturnLog"."ID" IS '流水號'; COMMENT ON COLUMN "WMS"."WMS_OrderStatusReturnLog"."DATA" IS '資料'; COMMENT ON COLUMN "WMS"."WMS_OrderStatusReturnLog"."D_INSERTTIME" IS '傳出時間'; COMMENT ON TABLE "WMS"."WMS_OrderStatusReturnLog" IS '排程執行結果紀錄明細';

建立NUMBER欄位時,可以指定該欄位的precision和scale如下

column_name NUMBER(precision, scale)
  • precision: 總位數,最多為38。
  • scale: 小數點後的位數。

例如宣告一個欄位名稱為salary,資料型態為NUMBER,有效位數為10位數,小數後2兩位,則語法為

salary NUMBER(10, 2)

如果沒給定precision,則會以儲存的值為準,如果沒給定scale,則預設為0




創序列 SEQUENCE

CREATE SEQUENCE SEQUENCE名稱 MINVALUE 1 -- 最小值,若不指定 或者 指定 NOMINVALUE,則最小值預設為 -10的26次方 MAXVALUE 999999999 -- 最大值,若不指定 或者 指定 NOMAXVALUE,則最大值預設為 10的27次方 INCREMENT BY 1 -- 流水號間隔,不指定的話預設為1 START WITH 1 -- 起始值 CACHE 20 -- 表示CACHE的數量,若不指定的話,預設為20,指定為NOCACHE表示不使用快取 NOORDER NOCYCLE -- 表示達最大值或最小值時不重頭開始,若指定CYCLE則會重頭計算 ;




創觸發程式 將 Table 和 SEQUENCE 關連起來 (產生流水號)

CREATE OR REPLACE TRIGGER TRIGGER名稱 BEFORE INSERT ON TABLE名稱 FOR EACH ROW BEGIN IF :new.ID IS NULL OR :new.ID = 0 THEN SELECT SEQUENCE名稱.NEXTVAL INTO :new.ID FROM DUAL; END IF; END;

全部完成後就可以去你新建的table,新增資料來看看ID欄位是否有按順序遞增