Возможно ли одновременное добавление столбца и ограничения при изменении таблицы Oracle?

У меня есть задание, в котором меня просят добавить столбец в таблицу и дать ему ограничение.

«Добавьте столбец с именем Base_Salary с типом данных NUMBER (7,2) в таблицу store_reps. Убедитесь, что введенная сумма больше 0».

Я думал, что это довольно просто, но, может быть, мне придется дважды ИЗМЕНИТЬ таблицу, один раз для нового столбца и еще раз для добавления ограничений? Это кажется излишним и неэффективным.

Я попытался снять второе «ДОБАВИТЬ» и переместить скобки и переместить запятые, кажется, что во всем, что я делаю, возникает аналогичная ошибка.

Это моя попытка:

ALTER TABLE store_reps; 
 ADD (Base_Salary NUMBER(7, 2)),
 ADD CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0);

я получаю сообщение об ошибке

ADD CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0)
ERROR report - 
UNKNOWN COMMAND

и другой:

Error starting at line : 74 in command -
ALTER TABLE store_reps 
 ADD (Base_Salary NUMBER(7, 2)),
 CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0)
Error report -

Любая помощь приветствуется. Я только начал SQL несколько недель назад, и я очень нуб.


person NoFigs    schedule 25.06.2019    source источник


Ответы (2)


Ваш запрос содержит две синтаксические проблемы, которые необходимо исправить:

  • убери запятую перед CONSTRAINT
  • избавиться от дополнительной пары фигурных скобок вокруг Base_Salary NUMBER(7, 2)

Рабочий пример:

create table store_reps (id number);

ALTER TABLE store_reps 
 ADD Base_Salary NUMBER(7, 2)
 CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0);
person Frank Schmitt    schedule 25.06.2019
comment
Спасибо, это было очень информативно. Я рад, что вы смогли легко найти мои синтаксические ошибки. Мне показалось, что это сработало: ADD (Base_Salary NUMBER(7, 2) CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary›0)); Несмотря на то, что он работает так, как я ожидаю, это все еще неправильный синтаксис? - person NoFigs; 25.06.2019
comment
Все должно быть хорошо - ИМХО дело личных предпочтений. - person Frank Schmitt; 25.06.2019
comment
Обратите внимание, что ограничения CHECK принимают значения NULL. Ваш столбец BASE_SALARY может содержать NULL. Если вам не нужны значения NULL, вам необходимо включить ограничение NOT NULL. - person Stew Ashton; 25.06.2019

create table tr (col1 number);

alter table tr add col2 varchar2(100) constraint tr_cons CHECK (col2 = 'a');

демонстрация DB Fiddle

Ваше здоровье!!

person Popeye    schedule 25.06.2019