我試圖啓動一個序列,它在插入完成後自動填充列。它應該從500開始,然後遞增1.任何想法我會如何去做這件事?到目前爲止,我有這樣的事情,但它似乎崩潰使用觸發器自動填充列SQL
CREATE TRIGGER ADD_TRIGGER ON tablename
AFTER INSERT
AS
BEGIN
ADD colname NUMBER IDENTITY(500,1);
END
GO
我試圖啓動一個序列,它在插入完成後自動填充列。它應該從500開始,然後遞增1.任何想法我會如何去做這件事?到目前爲止,我有這樣的事情,但它似乎崩潰使用觸發器自動填充列SQL
CREATE TRIGGER ADD_TRIGGER ON tablename
AFTER INSERT
AS
BEGIN
ADD colname NUMBER IDENTITY(500,1);
END
GO
您可以創建一個序列
CREATE SEQUENCE mySeq
START WITH 500
INCREMENT BY 1
CACHE 100;
,然後在你的觸發器使用它
CREATE OR REPLACE TRIGGER myTrigger
AFTER INSERT ON table_name
FOR EACH ROW
BEGIN
SELECT mySeq.nextval
INTO :new.colname
FROM dual;
END;
什麼是雙重?什麼是CACHE? – Josh123
dual是一個特殊表:http://docs.oracle.com/cd/B19306_01/server.102/b14200/queries009.htm緩存選項用於以塊的形式預先分配值。如果序列1-10被髮布並且數據庫崩潰,nextval將會是101.這個緩存的大小會根據您的使用而有所不同,但是您預期的同時發生的事務數量會更多。 –
甲骨文12C介紹IDENTITY COLUMNS。
SQL> CREATE TABLE new_identity_table
2 (
3 ID NUMBER GENERATED ALWAYS AS IDENTITY,
4 text VARCHAR2(50)
5 );
Table created.
SQL>
SQL> INSERT
2 INTO new_identity_table
3 (
4 text
5 )
6 VALUES
7 (
8 'This table has an identity column'
9 );
1 row created.
SQL> column text format A40;
SQL>
SQL> select * from new_identity_table;
ID TEXT
---------- ----------------------------------------
1 This table has an identity column
甲骨文將創建一個sequence
填充identity column
。你可以找到它命名爲ISEQ$$
SQL> select sequence_name, min_value, max_value, increment_by from user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY
-------------------- ---------- ---------------------------- ------------
ISEQ$$_93199 1 9999999999999999999999999999 1
更多關於身份列的詳細信息,請使用ALL_TAB_IDENTITY_COLS
視圖。
SQL> SELECT table_name,
2 column_name,
3 generation_type,
4 identity_options
5 FROM all_tab_identity_cols
6 WHERE owner = 'LALIT'
7 ORDER BY 1, 2;
TABLE_NAME COLUMN_NAME GENERATION IDENTITY_OPTIONS
-------------------- --------------- ---------- --------------------------------------------------
NEW_IDENTITY_TABLE ID ALWAYS START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999
999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N
, CACHE_SIZE: 20, ORDER_FLAG: N
對於預12C版本,請參閱Auto-increment primary key in Pre 12c releases (Identity functionality)
升級到Oracle 12.1+和使用'identity'。 –
請參閱[Pre-12c發行版中的自動遞增主鍵(身份功能**)](http://lalitkumarb.com/2015/01/20/auto-increment-primary-key-in-pre-12c-發佈 - 身份 - 功能/)和[** IDENTITY列自動增量功能在Oracle 12c **中](http://lalitkumarb.com/2015/01/20/identity-column-autoincrement-functionality-in-oracle-12c/ )。 –