SQLPlus AUTO_INCREMENT错误

时间:2011-10-31 02:00:50

标签: 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,
                        *
ERROR at line 2:
ORA-00907: missing right parenthesis

我做错了什么?

3 个答案:

答案 0 :(得分:11)

很多人会抱怨这不是Oracle中的标准功能,但是当它在CREATE TABLE命令之后就像另外两个命令一样简单时,我看不出有任何理由在每个插入上使用花哨的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

答案 1 :(得分:2)

Oracle没有auto_increment,您需要使用序列。

答案 2 :(得分:1)

或者-从Oracle 12.1开始-您可以简单地拥有:

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