sql >> Database teknologi >  >> RDS >> Oracle

Autoincrement i oracle til allerede oprettet tabel

11g og før, opret en sekvens for at øge kolonnen via trigger . Se Automatisk forøgelse af primær nøgle i Pre 12c-udgivelser (identitetsfunktionalitet)

For eksempel,

TABEL

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

Table created.
 

PRIMÆR NØGLE skal udfyldes af sekvensen

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

Table altered.
 

SEKVENS for at understøtte den primære nøgle

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

Sequence created.
 

TRIGGER Hvis du ikke ønsker at have sekvensen i INSERT , kan du automatisere det 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.
 

INDSÆT

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.
 

Lad os se, om vi har ID-kolonnen automatisk forøget med de ønskede værdier-

SQL> SELECT * FROM t;

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

SQL>
 

Så ID-kolonnen starter nu med værdien 150111111 og stiger med 1 med efterfølgende indsættelser.

12c , brug Identitetskolonnen . Se IDENTITY-kolonnens autoincrement-funktionalitet i Oracle 12c

For eksempel,

TABEL med IDENTITETSKOLONNE

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.
 

INDSÆT

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

1 row created.
 

Lad os se, om vi har ID-kolonnen automatisk forøget med de ønskede værdier-

SQL> COLUMN text format A40 SQL> SELECT * FROM t; ID TEXT ---------- ---------------------------------------- 150111111 This table has an identity column

Så ID-kolonnen starter nu med værdien 150111111 og stiger med 1 med efterfølgende indsættelser.

Oracle opretter en sequence for at udfylde identity column . Du kan finde det navngivet som 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>

Flere oplysninger om identitetskolonnerne, brug ALL_TAB_IDENTITY_COLS se.

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. Sådan indstilles MariaDB til at bruge vertikalt output

  2. Sådan fungerer LOG10() i MariaDB

  3. Konfiguration med høj tilgængelighed for ClusterControl-noder ved hjælp af CMON HA

  4. Hvordan vælger jeg de sidste 5 rækker i en tabel uden at sortere?