Search code examples
sqldatabaseoracleddl

ORA-30089 when execute CREATE TABLE with a DATE type field


I'm getting the following error when creating the following table:

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
);

I do not know if it is because of Oracle's permission to the user because I am on the desktop and here he does not let me create the table.

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:

The other tables I create them well but with the DATE datatype I do not know if I'm getting it wrong ...


Solution

  • The CREATE TABLE statement declares column DURACION as datatype INTERVAL

    INTERVAL is not a valid datatype. You can either use INTERVAL YEAR TO MONTH, or INTERVAL DAY TO SECOND (with various precision).

    Consider, for example:

    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
    );
    

    Demo on DB Fiddle

    Reference: Oracle datatypes.