SQLPlus AUTO_INCREMENT Ошибка - PullRequest
       0

SQLPlus AUTO_INCREMENT Ошибка

6 голосов
/ 31 октября 2011

Когда я пытаюсь выполнить следующую команду в 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

Что я делаю не так?

Ответы [ 2 ]

11 голосов
/ 31 октября 2011

Многие будут недовольны тем, что это не стандартная функция в 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
2 голосов
/ 31 октября 2011

В Oracle нет auto_increment, вам нужно использовать последовательности.

...