在資料表 TEST_TABLE 插入資料時,自動從 Sequence SEQ_SA_DATA 取值填入 ID 欄位。
CREATE OR REPLACE TRIGGER autoInsertSeq_stock_info_dayly
BEFORE INSERT ON test_table
FOR EACH ROW
DECLARE
next_data_id NUMBER;
BEGIN
SELECT seq_sa_data.NEXTVAL
INTO next_data_id
FROM DUAL;
:NEW.id := next_data_id;
END;
/
| 子句 | 說明 |
|---|---|
BEFORE INSERT | 在 INSERT 執行前觸發,可修改 :NEW 欄位值。 |
FOR EACH ROW | 列級觸發器,每插入一列執行一次。 |
:NEW.id | 參考新列的 ID 欄位,指派值後將寫入資料表。 |
SELECT ... NEXTVAL FROM DUAL | 取得 Sequence 下一值,Oracle 11g+ 也可直接 :NEW.id := seq_sa_data.NEXTVAL;(無需 SELECT INTO)。 |
CREATE TABLE test_table (
id NUMBER GENERATED ALWAYS AS IDENTITY,
col1 VARCHAR2(100),
...
);
12c 起內建 Identity Column,無需 Sequence + Trigger,效能更佳、語法更簡潔。
BULK INSERT 或 FORALL,觸發器仍逐列執行,Sequence 正常遞增。SELECT 權限。FOLLOWS 指定順序(11g+)。