ORA-30089 при выполнении CREATE TABLE с полем типа DATE - PullRequest
1 голос
/ 18 марта 2019

Я получаю следующую ошибку при создании следующей таблицы:

CREATE TABLE EVENTO(
    ID_EVENTO NUMBER PRIMARY KEY,
    ID_COMPLEJO NUMBER NOT NULL,
    N_COMISARIOS NUMBER,
    FECHA_EVENTO DATE,
    N_PARTICIPANTES NUMBER,
    DURACION INTERVAL,
    EQUIPAMIENTO VARCHAR2(255),
    FOREIGN KEY (ID_COMPLEJO) REFERENCES COMPLEJO
);

Я не знаю, если это из-за разрешения Oracle для пользователя, потому что я нахожусь на рабочем столе, а здесь он непозвольте мне создать таблицу.

Error que empieza en la línea: 28 del comando :
CREATE TABLE EVENTO(
    ID_EVENTO NUMBER PRIMARY KEY,
    ID_COMPLEJO NUMBER NOT NULL,
    N_COMISARIOS NUMBER,
    FECHA_EVENTO DATE,
    N_PARTICIPANTES NUMBER,
    DURACION INTERVAL,
    EQUIPAMIENTO VARCHAR2(255),
    FOREIGN KEY (ID_COMPLEJO) REFERENCES COMPLEJO
)
Informe de error -
ORA-30089: falta <campo datetime> o no es válido
30089. 00000 -  "missing or invalid <datetime field>"
*Cause:    A <datetime field> (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND) is
           expected but not found, or a <datetime field> specified the
           <end field> in an <interval qualifier> is more significant
           than its <start field>.
*Action:

Другие таблицы, которые я создаю, хорошо, но с типом данных DATE Я не знаю, ошибаюсь ли я ...

Ответы [ 2 ]

4 голосов
/ 18 марта 2019

Оператор CREATE TABLE объявляет столбец DURACION как тип данных INTERVAL

INTERVAL не является допустимым типом данных. Вы можете использовать INTERVAL YEAR TO MONTH или INTERVAL DAY TO SECOND (с различной точностью).

Рассмотрим, например:

CREATE TABLE EVENTO(
    ID_EVENTO NUMBER PRIMARY KEY,
    ID_COMPLEJO NUMBER NOT NULL,
    N_COMISARIOS NUMBER,
    FECHA_EVENTO DATE,
    N_PARTICIPANTES NUMBER,
    DURACION INTERVAL YEAR TO MONTH,
    EQUIPAMIENTO VARCHAR2(255),
    FOREIGN KEY (ID_COMPLEJO) REFERENCES COMPLEJO
);

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

Ссылка: Типы данных Oracle .

0 голосов
/ 18 марта 2019

Тип INTERVAL в поле длительности недопустим, он не существует как тип данных. Я рекомендую вам использовать дату начала и дату окончания, которая лучше и может предоставить гораздо лучшую информацию. Работа с интервалами может принести много проблем в будущем.

 CREATE TABLE EVENTO(
    ID_EVENTO NUMBER PRIMARY KEY,
    ID_COMPLEJO NUMBER NOT NULL,
    N_COMISARIOS NUMBER,
    FECHA_EVENTO DATE,
    N_PARTICIPANTES NUMBER,
    FECHA_INICIO DATE,
    FECHA_FIN DATE,
    EQUIPAMIENTO VARCHAR2(255),
    FOREIGN KEY (ID_COMPLEJO) REFERENCES COMPLEJO
)
...