Многие будут недовольны тем, что это не стандартная функция в Oracle, но когда после вашей команды CREATE TABLE так просто, как две другие команды, я не вижу веской причины использовать причудливый SQL для каждой вставки.
Сначала давайте создадим простой стол для игры.
SQL> CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));
Table created.
Теперь предположим, что мы хотим, чтобы ID представлял собой поле с автоматическим приращением. Сначала нам нужна последовательность, чтобы получить значения из.
SQL> CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;
Sequence created.
Теперь мы можем использовать эту последовательность в триггере BEFORE INSERT в таблице.
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