Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tự động gia tăng trong oracle vào bảng đã được tạo

Vào 11g và trước đó, hãy tạo một trình tự để tăng cột qua trình kích hoạt . Xem Khóa chính tự động tăng trong các bản phát hành trước 12c (Chức năng nhận dạng)

Ví dụ,

BẢNG

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

Table created.

TỪ KHÓA CHÍNH được điền bởi chuỗi

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

Table altered.

SEQUENCE để hỗ trợ khóa chính

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

Sequence created.

TRIGGER Nếu bạn không muốn có trình tự trong INSERT , bạn có thể tự động hóa nó thông qua 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.

CHÈN

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.

Hãy xem liệu chúng ta có cột ID tự động tăng lên với các giá trị mong muốn không-

SQL> SELECT * FROM t;

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

SQL>

Vì vậy, cột ID bây giờ bắt đầu với giá trị 150111111 và tăng lên 1 với các lần chèn tiếp theo.

Vào 12c , sử dụng cột danh tính . Xem chức năng tự động tăng thêm cột IDENTITY trong Oracle 12c

Ví dụ,

BẢNG với IDENTITY COLUMN

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.

CHÈN

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

1 row created.

Hãy xem liệu chúng ta có cột ID tự động tăng lên với các giá trị mong muốn không-

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

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

Vì vậy, cột ID bây giờ bắt đầu với giá trị 150111111 và tăng lên 1 với các lần chèn tiếp theo.

Oracle tạo một sequence để điền identity column . Bạn có thể tìm thấy nó được đặt tên là 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>

Thông tin thêm về các cột nhận dạng, hãy sử dụng ALL_TAB_IDENTITY_COLS xem.

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. Truy vấn mối quan hệ Khoá ngoại của Bảng

  2. Cách tạo bảng lồng nhau bằng kiểu dữ liệu do người dùng xác định trong cơ sở dữ liệu Oracle

  3. 4 cách để tìm hàng có chứa chữ hoa trong Oracle

  4. Bật ảo hóa trong BIOS trong máy tính xách tay hoặc máy tính để bàn cho máy ảo Virtualbox

  5. Cách giải quyết ORA-011033:Đang khởi động hoặc tắt ORACLE