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;
С другой стороны, если вы хотите, чтобы не заботиться о ПЕРВИЧНОМ 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
Надеется, что это помогает!
Подставляя это как комментарий, как это спекулятивный, но Sql Server га «@@ SCOPE_IDENTITY», так что оператор может быть «вставить фо ...., выберите @@ SCOPE_IDENTITY» ... Есть ли у Oracle что-то аналогичный? – Rob
Это будет ответ :) – andrecarlucci
Как и для SQL Server, я не знаю об этой системной переменной @@ SCOPE_IDENTITY, поэтому я знаю о скалярной функции IDENT_CURRENT, которая делает то же самое (SELECT IDENT_CURRENT (N'TableName)) –