Значения по умолчанию для столбцов Oracle 9i - PullRequest
1 голос
/ 31 марта 2012

Привет я запускаю следующий запрос в sql плюс

CREATE TABLE yii_profiles (
  user_id NUMBER(11) NOT NULL,
  lastname varchar(50)  NOT NULL DEFAULT '',
  firstname varchar(50) NOT NULL DEFAULT '',
  birthday date NOT NULL DEFAULT '0000-00-00',
  PRIMARY KEY (user_id)
);

Я получаю следующую ошибку.Можете ли вы сказать, где я иду не так?Я пробовал разные способы, но безуспешно.

ОШИБКА в строке 3: ORA-00907: отсутствует правая скобка

1 Ответ

2 голосов
/ 31 марта 2012

При создании ограничения вы должны явно указать ключевое слово constraint и имя этого ограничения, чтобы вы получили правильное имя в базе данных для этого объекта.

Oracle обрабатывает пустую строкукак ноль , так что NOT NULL DEFAULT '' не будет работать.Я удалил это и изменил varchar на varchar2, так как будущее поведение varchar не гарантируется .

CREATE TABLE yii_profiles (
  user_id NUMBER(11) NOT NULL,
  lastname varchar2(50)  NOT NULL,
  firstname varchar2(50) NOT NULL,
  birthday date NOT NULL,
  constraint pk_yii_profiles PRIMARY KEY (user_id)
);

Таким же образом установка значения по умолчанию наненулевой столбец не является обязательно хорошей идеей.Если вы хотите запоминать имена, фамилии и дни рождения ваших пользователей, хотите ли вы их по умолчанию?

Либо имя должно быть включено , в этом случае установка значения по умолчанию для этого столбца приведет только к созданию неверных данных, либо данные не требуются истолбец должен быть обнуляемым.Лично я бы удалил значение по умолчанию на birthday также по той же причине.Кроме того, как указало a_horse_with_no_name, 0 не работает как дата в Oracle.

Если birthday не означает «дата рождения», а вместо этого день, который является годовщиной рождения ваших пользователей, тогдарассмотреть вопрос об изменении этого и захвата даты рождения, а не дня рождения.Вы всегда сможете рассчитать день рождения, но вернуться к дате рождения было бы невозможно.

...