【发布时间】:2015-10-11 07:41:44
【问题描述】:
我正在尝试使用巧妙的序列生成器创建表以使用此插入结构:
insert into SOMEUSERS (SOMEUSERS_NAME, SOMEUSERS_PASSWORD)
values ('Artem', 'PracTimPatie');
而不是这个:
insert into SOMEUSERS (SOMEUSERS_ID, SOMEUSERS_NAME, SOMEUSERS_PASSWORD)
values (2, 'Artem', 'PracTimPatie');
或者这个结构:
insert into SOMEUSERS (SOMEUSERS_ID, SOMEUSERS_NAME, SOMEUSERS_PASSWORD)
values (GEN_ID_SOMEUSERS.nextval, 'Artem', 'PracTimPatie');
当我执行以下 sql 脚本时:
create sequence gen_id_someUsers START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
CREATE TABLE loc_db.someUsers
( someUsers_id number(10) DEFAULT gen_id_someUsers.NEXTVAL NOT NULL, --because of this row
someUsers_name varchar2(50) NOT NULL,
someUsers_password varchar2(50),
CONSTRAINT someUsers_pk PRIMARY KEY (someUsers_id)
);
给我以下通知:
错误报告 - SQL 错误:ORA-00984:此处不允许列 00984. 00000 - “此处不允许列”
为了清楚起见,在这种情况下表示:
...
CREATE TABLE loc_db.someUsers
( someUsers_id number(10) NOT NULL, --correct this row
...
已创建序列 GEN_ID_SOMEUSERS。
已创建表 LOC_DB.SOMEUSERS。
如何配置舒适的序列生成器?
(如果是 PostgreSQL 也是。如果可能没有触发器(尽可能简单)
【问题讨论】:
-
在 Postgres 中,只需将列定义为
serial: postgresql.org/docs/current/static/… 在 Oracle 11g 之前,您不能使用序列作为默认值。您必须在该版本中使用触发器。在 Oracle 12g 中,您实际上可以使用与您正在尝试执行的操作非常相似的语法。
标签: sql oracle postgresql sequence ddl