web-dev-qa-db-fra.com

Incrémentation automatique pour Oracle

J'ai besoin de créer une séquence et un déclencheur pour incrémenter automatiquement la clé primaire sur une table, mais je n'ai aucune idée de la façon de le faire.

21
David Garcia

Créez le tableau et la séquence

SQL> create table staff (
  2    emp_id number primary key,
  3    staff_name varchar2(100)
  4  );

Table created.

SQL> create sequence emp_id_seq;

Sequence created.

Maintenant, vous pouvez créer un déclencheur qui utilise la séquence pour remplir la clé primaire

SQL> create trigger trg_emp_id
  2    before insert on staff
  3    for each row
  4  begin
  5    select emp_id_seq.nextval
  6      into :new.emp_id
  7      from dual;
  8  end;
  9  /

Trigger created.

Maintenant, lorsque vous insérez des données, vous n'aurez plus besoin de spécifier le EMP_ID column-- il sera automatiquement rempli par le déclencheur

SQL> insert into staff( staff_name ) values ('Justin');

1 row created.

SQL> select * from staff;

    EMP_ID STAFF_NAME
---------- --------------------
         1 Justin
27
Justin Cave

Lisez ceci, bel article.

comment séquence [incrémentation automatique dans Oracle]

syntaxe

Create sequence sequence_name
start with value
increment by value
minvalue value
maxvalue value;

exemple

SQL> create table emp (
emp_id number(10),
fname varchar2(25),
lname varchar2(25),
constraint pk_emp_id PRIMARY KEY(emp_id)
);

SQL> Create sequence emp_sequence
start with 1
increment by 1
minvalue 1
maxvalue 10000;

SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Darvin','Johnson');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Mig','Andrews');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Alex','Martin');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Jon','paul');
SQL> insert into emp (emp_id,fname,lname) values(emp_sequence.nextval,'Yatin','Bones');

dans emp_sequence.nextvalemp_sequence est le nom de la séquence que nous avons créée ci-dessus et nextval est une fonction qui est utilisée pour affecter le next number from emp_sequence to emp_id colonne dans la table emp.

SQL> select * from emp;

  EMP_ID FNAME                     LNAME
---------- ------------------------- -------------------------
         1 Darvin                    Johnson
         2 Mig                       Andrews
         3 Alex                      Martin
         4 Jon                       paul
         5 Yatin                     Bones
21
mr_eclair

Essaye ça:

create sequence seq_EmpID start with 1 increment by 1


 insert into Emp_Table values(seq_EmpID.nextval,'Ram')
9
Vinod

Très bonne question !! La séquence peut probablement être utilisée de cette manière - aussi, je ne sais pas s'il y a vraiment une différence:

CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
0
gourav agrawal