我希望在一个类似于SQL Server的列中实现标识或自增值:
CREATE TABLE RollingStock
(
Id NUMBER IDENTITY(1,1),
Name Varchar2(80) NOT NULL
);
如何实现这一点?
我希望在一个类似于SQL Server的列中实现标识或自增值:
CREATE TABLE RollingStock
(
Id NUMBER IDENTITY(1,1),
Name Varchar2(80) NOT NULL
);
就像Orbman所说的那样,标准的方法是使用序列。大多数人还会将其与插入触发器相结合。因此,当插入一行数据时如果没有ID,触发器会触发并从序列中为您填充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中使用触发器是有意义的。
如果您真的不在乎主键包含什么内容,可以使用RAW类型作为主键列,该列保存二进制形式的系统生成的GUID。
CREATE TABLE RollingStock
(
ID RAW(16) DEFAULT SYS_GUID() PRIMARY KEY,
NAME VARCHAR2(80 CHAR) NOT NULL
);