Ответ 1
Oracle использует последовательности как для своих столбцов идентичности, если можно так сказать.
Если вы установили последовательность для первичного ключа вашей таблицы, вам также нужно написать триггер, который будет вставлять Sequence.NextValue или так в поле первичного ключа.
Предполагая, что вы уже знакомы с этой концепцией, просто запросите свою последовательность, затем вы получите ответ. То, что очень хорошо практикуется в Oracle, - это сделать себе функцию, которая вернет INT, а затем внутри вашей функции вы выполните свой INSERT. Предполагая, что вы правильно настроили свой триггер, вы сможете вернуть значение своей последовательности, запросив его.
Здесь экземпляр:
CREATE TABLE my_table (
id_my_table INT PRIMARY KEY
description VARCHAR2(100) NOT NULL
)
CREATE SEQUENCE my_table_seq
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
Если вы хотите самостоятельно управлять автоматическим приращением, выполните следующие действия:
INSERT INTO my_table (
id_my_table,
description
) VALUES (my_table_seq.NEXTVAL, "Some description");
COMMIT;
С другой стороны, если вы хотите не заботиться о приращении PRIMARY KEY, вы можете продолжить с помощью триггера.
CREATE OR REPLACE TRIGGER my_table_insert_trg
BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
SELECT my_table_seq.NEXTVAL INTO :NEW.id_my_table FROM DUAL;
END;
Затем, когда вы вставляете, вы просто вводите инструкцию INSERT следующим образом:
INSERT INTO my_table (description) VALUES ("Some other description");
COMMIT;
После INSERT, я думаю, вы захотите
SELECT my_table_seq.CURRVAL
или что-то вроде этого, чтобы выбрать фактическое значение вашей последовательности.
Вот несколько ссылок, которые помогут:
http://www.orafaq.com/wiki/Sequence
http://www.orafaq.com/wiki/AutoNumber_and_Identity_columns
Надеюсь, это поможет!