Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL错误:ORA-02000:缺少ALWAYS关键字_Sql_Oracle_Oracle11g_Identity Column - Fatal编程技术网

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

SQL错误:ORA-02000:缺少ALWAYS关键字,sql,oracle,oracle11g,identity-column,Sql,Oracle,Oracle11g,Identity Column,我使用的是Oracle版本11g,我希望ad 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版本的情况下解决此问题?很抱歉,您尝试连接的服务器/数据库可

我使用的是Oracle版本11g,我希望ad 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是一个不绑定到特定表的对象,可以在任何地方使用它来获取新的唯一编号。因此,您应该创建一个触发器来设置列的值)

Identity作为Oracle 12c的一部分引入,在11g中不可用,因此对于12c之前的自动增量ID,您可以使用它


习惯于对MS Access中的列或SQL Server中的标识列进行自动编号的开发人员经常抱怨,他们必须在Oracle中使用序列手动填充主键列

在Oracle中,使用触发器可以轻松实现此类功能

创建一个具有适当主键列和支持该列的序列的表

创建表部门(
ID号(10)不为空,
说明VARCHAR2(50)不为空);
更改表部门添加(
约束部门主键(ID));
创建序列部门;
如果插入中未指定ID列,则创建一个触发器来填充该列

创建或替换触发器部门\u bir
在插入部门之前
每行
当(new.id为空)
开始
选择dept\ u seq.NEXTVAL
输入:new.id
来自双重;
结束;
/

在Oracle 12c之前的版本中,您应该使用序列和触发器来处理自动编号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;
/

在执行插入时,只需为
区域ID
列指定一个
NULL
值,Oracle就会将其作为序列中的下一个整数来指定,因为DDL的格式不正确。我想您需要自动递增ID。如果是这样,您应该查找此链接:这是否回答了您的问题?
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;
/