使用触发器SQL

时间:2015-10-07 10:32:28

标签: sql database oracle triggers

我尝试启动一个在插入时自动填充列的序列。它应该从500开始并增加1.任何想法我将如何做到这一点?到目前为止,我有类似的东西,但似乎崩溃了

CREATE TRIGGER ADD_TRIGGER ON tablename
AFTER INSERT
AS
BEGIN
    ADD colname NUMBER IDENTITY(500,1);
END
GO

2 个答案:

答案 0 :(得分:1)

您可以创建序列

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;

答案 1 :(得分:0)

Oracle 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

Oracle创建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)