Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQLPlus AUTO_INCREMENT-Fehler

Viele werden sich darüber beschweren, dass dies kein Standardfeature in Oracle ist, aber wenn es so einfach ist wie zwei weitere Befehle nach Ihrem CREATE TABLE-Befehl, sehe ich keinen guten Grund, bei jeder Einfügung ausgefallenes SQL zu verwenden. Lassen Sie uns zuerst eine einfache Tabelle erstellen spielen mit.

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

Jetzt gehen wir davon aus, dass die ID ein Auto-Increment-Feld sein soll. Zuerst brauchen wir eine Sequenz, aus der wir Werte holen können.

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

Jetzt können wir diese Sequenz in einem BEFORE INSERT-Trigger für die Tabelle verwenden.

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