Oracle
 sql >> база данни >  >> RDS >> Oracle

Автоматично увеличаване в оракул към вече създадена таблица

На11g и преди, създайте последователност за да увеличите колоната чрез тригер . Вижте Автоматично увеличаване на първичния ключ в версии преди 12c (функционалност за самоличност)

Например,

ТАБЛИЦА

SQL> CREATE TABLE t (
  2    ID           NUMBER(10)    NOT NULL,
  3    text  VARCHAR2(50)  NOT NULL);

Table created.

ПЪРВИЧЕН КЛЮЧ да се попълва от последователността

SQL> ALTER TABLE t ADD (
  2    CONSTRAINT id_pk PRIMARY KEY (ID));

Table altered.

ПОСЛЕДОВАТЕЛНОСТ за поддръжка на първичния ключ

SQL> CREATE SEQUENCE t_seq
  2  START WITH 150111111
  3  INCREMENT BY 1;

Sequence created.

ЗАПУСКВАНЕ Ако не искате да имате последователността в INSERT , можете да го автоматизирате чрез TRIGGER.

SQL> CREATE OR REPLACE TRIGGER t_trg
  2  BEFORE INSERT ON t
  3  FOR EACH ROW
  4  WHEN (new.id IS NULL)
  5  BEGIN
  6    SELECT t_seq.NEXTVAL
  7    INTO   :new.id
  8    FROM   dual;
  9  END;
 10  /

Trigger created.

ВМЪКНЕТЕ

SQL> INSERT INTO t(text) VALUES('auto-increment test 1');

1 row created.

SQL> INSERT INTO t(text) VALUES('auto-increment test 2');

1 row created.

Нека да видим дали колоната с идентификатор е автоматично увеличена с желаните стойности-

SQL> SELECT * FROM t;

        ID TEXT
---------- --------------------------------------------------
 150111111 auto-increment test 1
 150111112 auto-increment test 2

SQL>

И така, колоната ID вече започва със стойност 150111111 и се увеличава с 1 с последващи вмъквания.

На12c , използвайте Колона за самоличност . Вижте функционалност за автоматично нарастване на колона IDENTITY в Oracle 12c

Например,

ТАБЛИЦА сКОЛОНА ЗА ИДЕНТИЧНОСТ

SQL> CREATE TABLE t
  2    (
  3      ID NUMBER GENERATED ALWAYS AS IDENTITY
  4      START WITH 150111111 INCREMENT BY 1,
  5      text VARCHAR2(50)
  6    );

Table created.

ВМЪКНЕТЕ

SQL> INSERT INTO t
  2    ( text
  3    ) VALUES
  4    ( 'This table has an identity column'
  5    );

1 row created.

Нека да видим дали колоната с идентификатор е автоматично увеличена с желаните стойности-

SQL> COLUMN text format A40
SQL> SELECT * FROM t;

        ID TEXT
---------- ----------------------------------------
 150111111 This table has an identity column

И така, колоната ID вече започва със стойност 150111111 и се увеличава с 1 с последващи вмъквания.

Oracle създава sequence за да попълните identity column . Можете да го намерите с име ISEQ$$

SQL> SELECT sequence_name,
  2    min_value,
  3    max_value,
  4    increment_by
  5  FROM user_sequences;

SEQUENCE_NAME                   MIN_VALUE  MAX_VALUE INCREMENT_BY
------------------------------ ---------- ---------- ------------
ISEQ$$_94087                            1 1.0000E+28            1

SQL>

Повече информация за колоните за идентичност използвайте 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,
  8    2;

TABLE_NAME           COLUMN_NAME GENERATION IDENTITY_OPTIONS
-------------------- ----------- ---------- ----------------------------------------------

T                    ID          ALWAYS     START WITH: 150111111, INCREMENT BY: 1, 
                                            MAX_VALUE:9999999999999999999999999999, 
                                            MIN_VALUE: 1, CYCLE_FLAG: N, CACHE_SIZE: 20, 
                                            ORDER_FLAG: N



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да изброя ВСИЧКИ грантове, които е получил потребител?

  2. Как да сравним два обекта на база данни в Oracle?

  3. Как да изберете само 1 ред от oracle sql?

  4. Преобразуване на Long в Varchar2

  5. PL/SQL настройка на производителността за LIKE '%...%' заместващи заявки