Ошибки появляются при создании таблицы в oracle. В чем может быть ошибка? - PullRequest
0 голосов
/ 07 мая 2020
CREATE TABLE users(
 id int(11) NOT NULL AUTO_INCREMENT,
 username varchar2(100) NOT NULL,
 email varchar2(100) NOT NULL,
 verified int(1) NOT NULL DEFAULT '0',
 token varchar2(255) DEFAULT NULL,
 password varchar2(255) NOT NULL,
 CONSTRAINT PK_id PRIMARY KEY (id)
);

1 Ответ

1 голос
/ 07 мая 2020

Неправильный синтаксис. Должно быть

SQL> CREATE TABLE users
  2  (
  3     id        INT GENERATED ALWAYS AS IDENTITY,
  4     username  VARCHAR2 (100) NOT NULL,
  5     email     VARCHAR2 (100) NOT NULL,
  6     verified  INT DEFAULT 0  NOT NULL,
  7     token     VARCHAR2 (255),
  8     password  VARCHAR2 (255) NOT NULL,
  9     CONSTRAINT PK_id PRIMARY KEY (id)
 10  );

Table created.

SQL>

Что вы сделали не так?

  • нет auto increment; от 12 c вы можете использовать столбцы идентификаторов (как в моем примере; в более ранних версиях мы делали это с последовательностями и триггерами базы данных)
  • сначала идет default, затем not null
  • INT тип данных не имеет точности
  • не используется в объявлении столбца первичного ключа not null; ограничение первичного ключа все равно не позволит

Как оказалось, вы используете 11g, тогда, как я уже сказал, столбец идентификаторов не будет работать. Вот обходной путь:

SQL> create sequence sequ;

Sequence created.

SQL> create table users
  2  (
  3     id        int,
  4     username  varchar2 (100) not null,
  5     email     varchar2 (100) not null,
  6     verified  int default 0  not null,
  7     token     varchar2 (255),
  8     password  varchar2 (255) not null,
  9     constraint pk_id primary key (id)
 10  );

Table created.

SQL> create or replace trigger trg_pk_users
  2    before insert on users
  3    for each row
  4  begin
  5    :new.id := sequ.nextval;
  6  end;
  7  /

Trigger created.

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...