如何解决SQL错误:ORA-02000:始终缺少关键字
我使用Oracle 11g版,我想添加HR db,但是当我尝试创建表时出现此错误。
CREATE TABLE regions
(
region_id NUMBER GENERATED ALWAYS BY DEFAULT AS IDENTITY
START WITH 5 PRIMARY KEY,region_name VARCHAR2( 50 ) NOT NULL
);
如何在不更改oracle版本的情况下解决此问题?
解决方法
很抱歉,但是您尝试连接的服务器/数据库可能是12c,而您的/客户端不支持该功能。 (我相信IDENTITY
的定义是在12c中引入的)
也许尝试改用SEQUENCE
。 (序列是未绑定到特定表的对象,可以在任何地方使用以获取新的唯一数字。因此,您应该创建一个触发器以将值设置为列)
身份已作为Oracle 12c的一部分引入,在11g中不可用,因此对于12c之前的自动递增ID,您可以使用此post
习惯于使用MS Access的AutoNumber列或SQL Server的Identity列的开发人员经常抱怨必须使用Oracle中的序列手动填充主键列。
使用触发器在Oracle中可以轻松实现这种功能。
使用适当的主键列和支持它的序列创建一个表。
CREATE TABLE departments (
ID NUMBER(10) NOT NULL,DESCRIPTION VARCHAR2(50) NOT NULL);
ALTER TABLE departments ADD (
CONSTRAINT dept_pk PRIMARY KEY (ID));
CREATE SEQUENCE dept_seq;
如果未在插入中指定ID列,则创建一个触发器以填充ID列。
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
WHEN (new.id IS NULL)
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;
/
,
在Oracle 12c之前的版本中,您应该使用SEQUENCE和TRIGGER来处理您的自动编号ID
表
CREATE TABLE regions
(
region_id NUMBER(10) NOT NULL,region_name VARCHAR2(50) NOT NULL
);
ALTER TABLE regions ADD (
CONSTRAINT regions_pk PRIMARY KEY (ID));
序列:
CREATE SEQUENCE regions_seq;
触发:
CREATE OR REPLACE TRIGGER regions_id_generate
BEFORE INSERT ON regions
FOR EACH ROW
WHEN (new.region_id IS NULL)
BEGIN
SELECT regions_seq.NEXTVAL
INTO :new.region_id
FROM dual;
END;
/
执行插入操作时,只需为NULL
列指定一个region_ID
值,Oracle会将其赋予序列中的下一个整数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。