Первичный ключ автоинкремент в базе данных Oracle
Я хотел бы получить идентификатор или автоматически увеличивающееся значение в столбце ala SQL Server:
CREATE TABLE RollingStock
(
Id NUMBER IDENTITY(1,1),
Name Varchar2(80) NOT NULL
);
Как это можно сделать?
2 ответов
Как Orbman говорит, стандартный способ сделать это с последовательностью. То, что большинство людей также делают, это соединить это с триггером вставки. Поэтому, когда строка вставляется без ID, триггер заполнить удостоверение из последовательности.
CREATE SEQUENCE SEQ_ROLLINGSTOCK_ID START WITH 1 INCREMENT BY 1 NOCYCLE;
CREATE OR REPLACE TRIGGER BI_ROLLINGSTOCK
BEFORE INSERT ON ROLLINGSTOCK
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
WHEN (NEW.ID IS NULL)
BEGIN
select SEQ_ROLLINGSTOCK_ID.NEXTVAL
INTO :NEW.ID from dual;
END;
Это один из немногих случаев, когда имеет смысл использовать триггер в Oracle.
Если вам действительно все равно, что содержит первичный ключ, вы можете использовать необработанный тип для столбца первичного ключа, который содержит системный guid в двоичной форме.
CREATE TABLE RollingStock
(
ID RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
NAME VARCHAR2(80 CHAR) NOT NULL
);