ROWID - это физический адрес строки в таблице.Не имеет смысла использовать ROWID в качестве ключа - ROWID будет меняться со временем, если таблица перемещается из одного табличного пространства в другое, если вы выполняете экспорт и импорт, если происходит перемещение строк и т. Д. И это не такимеет смысл увеличивать ROWID, поскольку результат, скорее всего, будет недействительным либо в том смысле, что он больше не будет физическим адресом фактической строки, либо что он больше не будет действительным физическим адресом.
ЕслиЕсли вы хотите использовать автоинкрементный первичный ключ в Oracle, вы должны объявить столбец как NUMBER, а не ROWID.Затем вы должны создать объект последовательности
CREATE SEQUENCE entry_id_seq
START WITH 1
INCREMENT BY 1
CACHE 100;
и сослаться на NEXTVAL
этой последовательности в вашем INSERT
утверждении
INSERT INTO entry( entry_id, name )
VALUES( entry_id_seq.nextval, :1 );
Конечно, вы можете создать пред вставкутриггер для заполнения первичного ключа из последовательности
CREATE OR REPLACE TRIGGER get_entry_id
BEFORE INSERT ON entry
FOR EACH ROW
IS
BEGIN
SELECT entry_id_seq.nextval
INTO :new.entry_id
FROM dual;
END;
Ваш оператор INSERT
может затем пропустить столбец ENTRY_ID
, позволяя триггеру автоматически заполнить его.
INSERT INTO entry( name )
VALUES( :1 );