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

buat tabel dengan sequence.nextval di oracle

Oracle 12c

Kami sekarang akhirnya memiliki IDENTITY kolom seperti banyak database lainnya, dalam hal urutan dibuat secara otomatis di belakang layar. Solusi ini jauh lebih cepat daripada solusi berbasis pemicu seperti yang dapat dilihat di postingan blog ini.

Jadi, pembuatan tabel Anda akan terlihat seperti ini:

CREATE TABLE qname
(
    qname_id integer GENERATED BY DEFAULT AS IDENTITY (START WITH 1) NOT NULL PRIMARY KEY,
    qname    VARCHAR2(4000) NOT NULL -- CONSTRAINT qname_uk UNIQUE
);

Oracle 11g ke bawah

Menurut dokumentasi, Anda tidak dapat melakukan itu:

Pembatasan Nilai Kolom Default Ekspresi DEFAULT tidak dapat berisi referensi ke fungsi PL/SQL atau kolom lain, pseudocolumns CURRVAL, NEXTVAL, LEVEL, PRIOR, dan ROWNUM, atau konstanta tanggal yang tidak sepenuhnya ditentukan.

Cara standar untuk memiliki kolom "kenaikan otomatis" di Oracle adalah dengan menggunakan pemicu, mis.

CREATE OR REPLACE TRIGGER my_trigger
  BEFORE INSERT 
  ON qname
  FOR EACH ROW
  -- Optionally restrict this trigger to fire only when really needed
  WHEN (new.qname_id is null)
DECLARE
  v_id qname.qname_id%TYPE;
BEGIN
  -- Select a new value from the sequence into a local variable. As David
  -- commented, this step is optional. You can directly select into :new.qname_id
  SELECT qname_id_seq.nextval INTO v_id FROM DUAL;

  -- :new references the record that you are about to insert into qname. Hence,
  -- you can overwrite the value of :new.qname_id (qname.qname_id) with the value
  -- obtained from your sequence, before inserting
  :new.qname_id := v_id;
END my_trigger;

Baca lebih lanjut tentang Oracle TRIGGER dalam dokumentasi



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara optimal untuk MENGHAPUS baris tertentu dari Oracle

  2. Bagaimana Cara Membuat Tabel di Oracle SQL Developer?

  3. Mengintegrasikan ServiceNow dengan Oracle Identity Cloud Service (IDCS)

  4. Oracle:apakah ada alasan logis untuk tidak menggunakan eksekusi paralel dengan subquery dalam daftar SELECT?

  5. Bagaimana cara menerapkan pengambilan batch dengan Fluent NHibernate saat bekerja dengan Oracle?