Ho bisogno di creare una sequenza e un trigger per incrementare automaticamente la chiave primaria su una tabella ma non ho idea di come farlo.Incremento automatico per Oracle
risposta
creare la tabella e la sequenza
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.
Ora, è possibile creare un trigger che utilizza la sequenza per popolare la chiave
primariaSQL> 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.
Ora, quando si inseriscono i dati, non è necessario specificare la colonna EMP_ID
-- verrà automaticamente compilata dal trigger
SQL> insert into staff(staff_name) values ('Justin');
1 row created.
SQL> select * from staff;
EMP_ID STAFF_NAME
---------- --------------------
1 Justin
Leggi questo, bellissimo articolo.
come sequenza [auto increment in oracle]
sintassi
Create sequence sequence_name
start with value
increment by value
minvalue value
maxvalue value;
esempio
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');
in emp_sequence.nextval
dove emp_sequence
è il nome della sequenza abbiamo creato sopra e nextval
è una funzione che viene utilizzato per assegnare il next number from emp_sequence to emp_id
colonna nella tabella emp.
SQL> select * from emp;
EMP_ID FNAME LNAME
---------- ------------------------- -------------------------
1 Darvin Johnson
2 Mig Andrews
3 Alex Martin
4 Jon paul
5 Yatin Bones
Grazie, molto pulito, posso usare la stessa sequenza per qualsiasi tabella che richiede l'incremento automatico? anche quale parte è il grilletto? –
Per curiosità, perché l'ho letto due volte? –
molto ben spiegato, grazie –
Prova questa:
create sequence seq_EmpID start with 1 increment by 1
insert into Emp_Table values(seq_EmpID.nextval,'Ram')
dolce e semplice, grazie anche a te –
Molto buona domanda !! Probabilmente sequenza può essere utilizzato in questo modo - anche, non sono sicuro se c'è davvero una differenza:
CREATE SEQUENCE emp_id_seq MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
Questo è quasi identico a un'altra risposta. –
Se si utilizza una sequenza di più tabelle, perché il valore della sequenza è esempio incoerente: abbiamo due tabelle emp e depeartement: Se uso la sequenza su emp avrei: ID_dept = 6 perché il 5 è già utilizzato nell'altra tabella.
esempio:
SQL> insert into emp values(masequence.nextval,'aaa');
1 ligne crÚÚe.
SQL> insert into departement values(masequence.nextval,'aaa');
1 ligne crÚÚe.
SQL> select * from emp;
ID_EMP NOM_EMP
---------- -------------------------
5 aaa
SQL> select * from departement;
ID_DEPT NOM_DEPT
---------- ----------
6 aaa
SQL>
- 1. Rileva colonna incremento automatico
- 2. Android SQLite incremento automatico
- 3. Proprietà incremento automatico in Neo4j
- 4. Proprietà incremento automatico non chiave
- 5. Google App Engine - incremento automatico
- 6. incremento automatico multiplo in mysql
- 7. incremento automatico SQLite non funziona
- 8. Ottieni il successivo incremento automatico
- 9. C#, Entity Framework, incremento automatico
- 10. rospo per il completamento automatico di Oracle oracle
- 11. ID incremento automatico nel database H2
- 12. Problema con colonna "id" con incremento automatico
- 13. LINQ to Objects numero di incremento automatico
- 14. Redshift psql incremento automatico sul numero pari
- 15. Comportamento ambito e incremento automatico (Android)
- 16. Incremento automatico su Archiviazione tabelle di Azure
- 17. Esiste un incremento automatico in sqlite?
- 18. C# Regex - Corrispondenza e sostituzione, Incremento automatico
- 19. mysql chiavi primarie illimitate incremento automatico
- 20. Numero di incremento automatico codice xcode?
- 21. incremento automatico subquery in tsql dichiarazione prescelta
- 22. Scala & Gioca! & Slick e PostgreSQL incremento automatico
- 23. Voci di incremento automatico enumerazione Java?
- 24. Incremento automatico id con sequelize in MySQL
- 25. variabile di incremento automatico nel ciclo while
- 26. Numero di incremento automatico per più righe in PhpStorm
- 27. ibernazione - come impostare l'incremento automatico nei database mysql e oracle?
- 28. Come impostare due colonne nel database SQL Server come incremento automatico int con incremento seme 100?
- 29. Campo di incremento automatico di Django BigInteger come chiave primaria?
- 30. incremento automatico un elenco generico utilizzando LINQ in C#
Ciao, fantastico è possibile utilizzare una sequenza per tabelle diverse? –
@JoseDavidGarciaLlanos - Puoi, si. Convenzionalmente, creeresti sequenze separate per ogni tavolo. Ad esempio, riduce la contesa tra le sessioni facendo inserimenti su tabelle diverse. –
Grazie per la guida e il codice di attivazione –