微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL错误:ORA-02000:始终缺少关键字

如何解决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 举报,一经查实,本站将立刻删除。