Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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
SQLPlus自动增量错误_Sql_Database_Oracle_Sqlplus - Fatal编程技术网

SQLPlus自动增量错误

SQLPlus自动增量错误,sql,database,oracle,sqlplus,Sql,Database,Oracle,Sqlplus,当我尝试在SQLPlus中运行以下命令时: CREATE TABLE Hotel (hotelNo NUMBER(4) NOT NULL AUTO_INCREMENT, hotelName VARCHAR(20) NOT NULL, city VARCHAR(50) NOT NULL, CONSTRAINT hotelNo_pk PRIMARY KEY (hotelNo)); 我得到以下错误: (hotelNo NUMBER(4) NOT NULL AUTO_INCREMENT,

当我尝试在SQLPlus中运行以下命令时:

CREATE TABLE Hotel
(hotelNo NUMBER(4) NOT NULL AUTO_INCREMENT,
hotelName VARCHAR(20) NOT NULL,
city VARCHAR(50) NOT NULL,
CONSTRAINT hotelNo_pk PRIMARY KEY (hotelNo));
我得到以下错误:

(hotelNo NUMBER(4) NOT NULL AUTO_INCREMENT,
                        *
ERROR at line 2:
ORA-00907: missing right parenthesis

我做错了什么?

Oracle没有自动递增功能,您需要使用序列。

很多人会抱怨这不是Oracle的标准功能,但是当创建表命令后再执行两个命令就很容易了,我看不出有什么好的理由在每次插入时都使用高级SQL。 首先,让我们创建一个简单的表来玩

SQL> CREATE TABLE test
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));
Table created.
现在我们假设我们希望ID是一个自动递增的字段。首先,我们需要一个序列从中获取值

SQL> CREATE SEQUENCE test_sequence
START WITH 1
INCREMENT BY 1;
Sequence created.
现在我们可以在表上的BEFORE INSERT触发器中使用该序列

CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT
ON test
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
END;
/


SQL> INSERT INTO test (name) VALUES ('Jon');
1 row created.

SQL> INSERT INTO test (name) VALUES (’Bork’);
1 row created.

SQL> INSERT INTO test (name) VALUES (’Matt’);
1 row created.

SQL> SELECT * FROM test;

ID NAME
———- ——————————
1 Jon
2 Bork
3 Matt

或者—从Oracle 12.1开始—您只需:

CREATE TABLE employee 
(
    id NUMBER GENERATED by default on null as IDENTITY
    ....
)

你确定Oracle有自动增量吗?不,我想没有。我只是假设。