Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur SQLPlus AUTO_INCREMENT

Beaucoup se plaindront que ce n'est pas une fonctionnalité standard dans Oracle, mais quand c'est aussi simple que deux commandes supplémentaires après votre commande CREATE TABLE, je ne vois aucune bonne raison d'utiliser SQL sophistiqué à chaque insertion. Commençons par créer une table simple pour jouer avec.

SQL> CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));
Table created.

Maintenant, nous supposerons que nous voulons que ID soit un champ d'incrémentation automatique. Nous avons d'abord besoin d'une séquence pour récupérer les valeurs.

SQL> CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;
Sequence created.

Nous pouvons maintenant utiliser cette séquence dans un déclencheur BEFORE INSERT sur la table.

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT
ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
END;
/


SQL> INSERT INTO test (name) VALUES ('Jon');
1 row created.

SQL> INSERT INTO test (name) VALUES (’Bork’);
1 row created.

SQL> INSERT INTO test (name) VALUES (’Matt’);
1 row created.

SQL> SELECT * FROM test;

ID NAME
———- ——————————
1 Jon
2 Bork
3 Matt