sql >> Database >  >> RDS >> Oracle

Automatisch verhogen in orakel naar reeds gemaakte tabel

Op 11g en eerder, maak een reeks om de kolom te verhogen via trigger . Zie Primaire sleutel automatisch verhogen in Pre 12c-releases (Identity-functionaliteit)

Bijvoorbeeld,

TABEL

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

Table created.

PRIMAIRE SLEUTEL in te vullen door de reeks

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

Table altered.

VOLGORDE om de primaire sleutel te ondersteunen

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

Sequence created.

TRIGGER Als u de reeks niet in de INSERT . wilt hebben , je zou het kunnen automatiseren via 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.

INSERT

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.

Laten we eens kijken of we de ID-kolom automatisch laten ophogen met de gewenste waarden-

SQL> SELECT * FROM t;

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

SQL>

Dus de ID-kolom begint nu met waarde 150111111 en wordt met 1 verhoogd bij daaropvolgende invoegingen.

Op 12c , gebruik Identiteitskolom . Zie IDENTITY kolom auto-increment functionaliteit in Oracle 12c

Bijvoorbeeld,

TABEL met IDENTITEITSKOLOM

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.

INSERT

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

1 row created.

Laten we eens kijken of we de ID-kolom automatisch laten ophogen met de gewenste waarden-

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

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

Dus de ID-kolom begint nu met waarde 150111111 en wordt met 1 verhoogd bij daaropvolgende invoegingen.

Oracle maakt een sequence om de identity column te vullen . Je kunt het vinden met de naam 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>

Meer informatie over de identiteitskolommen, gebruik de ALL_TAB_IDENTITY_COLS bekijken.

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. Structured Query Language – Het belang van het leren van SQL

  2. Hoe krijg ik de eerste dag van elke overeenkomstige maand in mysql?

  3. Queryresultaten exporteren naar .csv of door tabs gescheiden bestand in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 23

  4. Postgresql:het pg_hba.conf-bestand vinden met Mac OS X