Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Peningkatan otomatis di Oracle ke tabel yang sudah dibuat

Pada 11g dan sebelumnya, buat urutan untuk menambah kolom melalui pemicu . Lihat Kunci utama penambahan otomatis dalam rilis Pra 12c (Fungsi identitas)

Misalnya,

TABEL

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

Table created.

KUNCI UTAMA untuk diisi oleh urutan

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

Table altered.

Urutan untuk mendukung kunci utama

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

Sequence created.

PICU Jika Anda tidak ingin memiliki urutan di INSERT , Anda dapat mengotomatiskannya melalui 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.

MASUKKAN

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.

Mari kita lihat apakah kolom ID kita bertambah secara otomatis dengan nilai yang diinginkan-

SQL> SELECT * FROM t;

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

SQL>

Jadi, kolom ID sekarang dimulai dengan nilai 150111111 dan bertambah 1 dengan sisipan berikutnya.

Pada 12c , gunakan Kolom identitas . Lihat fungsi peningkatan otomatis kolom IDENTITAS di Oracle 12c

Misalnya,

TABEL dengan KOLOM IDENTITAS

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.

MASUKKAN

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

1 row created.

Mari kita lihat apakah kolom ID kita bertambah secara otomatis dengan nilai yang diinginkan-

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

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

Jadi, kolom ID sekarang dimulai dengan nilai 150111111 dan bertambah 1 dengan sisipan berikutnya.

Oracle membuat sequence untuk mengisi identity column . Anda dapat menemukannya bernama 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>

Informasi lebih lanjut tentang kolom identitas, gunakan ALL_TAB_IDENTITY_COLS lihat.

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. Bagaimana Melewati Daftar Objek Java ke Oracle Stored Procedure Menggunakan MyBatis?

  2. Bagaimana Cara Membuat Fungsi di PL/SQL?

  3. ORDER BY dengan kueri dalam, memberikan ORA-00907 tanda kurung kanan yang hilang

  4. Apakah ada ekspresi CASE seperti itu di JPQL?

  5. Oracle.ManagedDataAccess.EntityFramework - ORA-01918:pengguna 'dbo' tidak ada