cyberkiwi уже ответил на ваш вопрос о синтаксической ошибке.
Поскольку вы новичок в SQL, я хотел бы прокомментировать сам DDL. В частности, похоже, что вы используете неправильные типы данных для ряда этих столбцов - это вернется, чтобы укусить вас.
- Не следует использовать тип CHAR данных, если вы не имеете чрезвычайно веские причины, чтобы сделать это
Многие пользователи Oracle будут идти дальше и предположить, что вы никогда не использовать тип CHAR данных. Основная проблема с использованием CHAR заключается в том, что данные пустые. Поэтому, если вы храните слово «мужчина» в столбце GENDER
, а GENDER
- это CHAR (6), Oracle должен хранить два дополнительных пространства в конце строки. Это делает будущие операции сравнения очень опасными - вы должны убедиться, что используется семантика сравнения CHAR, а не семантика сравнения VARCHAR, и это имеет тенденцию становиться уродливым. Кроме того, вы теряете пространство на диске и в памяти, чтобы сохранить эти два дополнительных пространства без каких-либо преимуществ. Все ваши CHAR колонок должны быть действительно
- даты Магазин VARCHAR2 в dates-- Не храните компоненты даты и не хранить даты как строки
Вместо хранения YEAR_OF_BIRTH
, MONTH_OF_BIRTH
, и DAY_OF_BIRTH
, вы почти наверняка лучше с одним столбцом BIRTH_DATE
типа DATE, где вы храните дату рождения. Вы всегда можете извлечь различные компоненты даты, если хотите узнать, в каком году родился человек. Однако хранение данных как DATE гарантирует, что сами компоненты даты действительны (т. Е. Нет опечаток, в которых месяц указан как «февраль», нет проблем с качеством данных, где месяц иногда «фев», иногда «февраль», а иногда «2», даты 30 февраля и т. д.). Хранение данных как DATE дает оптимизатору гораздо больше информации для работы, поэтому с большей вероятностью будет генерировать наиболее эффективный план, потому что он знает что-то о распределении данных. И вы можете использовать все различные функции даты, предоставляемые Oracle.
К тому же, так как CREATE_TIME
и MOD_TIME
являются датами (дата Oracle всегда есть день и компонент времени), вы должны хранить их в качестве даты (или Timestamps), а не VARCHAR2 лет. Это позволяет использовать функции даты (или временную метку), это гарантирует, что время действительно, оно устраняет проблемы с различными форматами, хранящимися в одном столбце, и это упрощает использование различных функций даты.
в оракуле с «run» –