Как установить автоматическое приращение первичного ключа в таблице в SQL DEVELOPER? - PullRequest
5 голосов
/ 14 апреля 2020

Я пытался установить для "w_no" значение auto_increment, как мы делаем в MySQL, но оно выдавало ошибку.

Как установить автоматическое приращение в sql для разработчика? Можем ли мы сделать с помощью кода или сделать что-то еще?

Вот код

CREATE TABLE ward (
      w_no      INT PRIMARY KEY AUTO_INCREMENT,
      wname     VARCHAR(30),
      w_loc     VARCHAR(30),
      phone_no  NUMERIC(10, 0),
      sno       INT
);

/*alter table ward ;*/  /*Can we do auto_increment using alter table here*/

Ответы [ 3 ]

6 голосов
/ 14 апреля 2020

Не используйте VARCHAR, используйте VARCHAR2

Также, если вам нужна помощь, попробуйте диалоги CREATE TABLE.

Мы создадим таблицу, PK, последовательность и триггер для вы.

Или, если вы используете базу данных 12 c или выше, вы можете использовать предложение IDENTITY.

enter image description here

Затем нажмите на страницу DDL мастера, и мы покажем вам код, так что вам не нужно будет угадывать, что делает диалог.

CREATE TABLE TABLE1 
(
  COLUMN1 INTEGER NOT NULL 
, COLUMN2 VARCHAR2(20) 
, COLUMN3 VARCHAR2(20) 
, CONSTRAINT TABLE1_PK PRIMARY KEY 
  (
    COLUMN1 
  )
  ENABLE 
);

CREATE SEQUENCE TABLE1_SEQ;

CREATE TRIGGER TABLE1_TRG 
BEFORE INSERT ON TABLE1 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF INSERTING AND :NEW.COLUMN1 IS NULL THEN
      SELECT TABLE1_SEQ.NEXTVAL INTO :NEW.COLUMN1 FROM SYS.DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/
2 голосов
/ 14 апреля 2020

Поскольку ваша версия базы данных Oracle в 11g, вам нужно использовать объект SEQUENCE для увеличения первичного ключа. См. Документацию для CREATE SEQUENCE .

Вы можете ссылаться на порядковый номер при вставке данных. Или же вы можете создать TRIGGER для увеличения значения в таблице, используя sequence.NEXTVAL.

Начиная с версии 12c, Oracle представленный IDENTITY столбцы, которые можно использовать как:

NUMBER GENERATED ALWAYS AS IDENTITY

В отдельной заметке, пожалуйста, избегайте использования VARCHAR в качестве Oracle, настоятельно рекомендуем использовать VARCHAR2 вместо для хранения символьных строк переменной длины .

2 голосов
/ 14 апреля 2020

Я не думаю, что Oracle ввел типы данных IDENTITY до 12 c. В этом случае вы должны использовать объект SEQUENCE вместо отсутствия типа IDENTITY.

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