Я не знаю, что плохого в моем SQL (в Oracle SQL Developer)

#oracle #oracle-sqldeveloper

#Oracle #oracle-sqldeveloper

Вопрос:

Я делаю тестовую базу данных для круизной компании. Дело в том, что я создал код в сетевой среде IDE (db-fiddle), но когда дело доходит до размещения его в Oracle SQL Developer, я получаю эту ошибку почти во всех таблицах.

Oracle SQL Developer

 create table CLIENT (
    DNI varchar(9),
    Nombre varchar(20) not null,
    Fecha_nacimiento date not null,
    CONSTRAINT client_pk PRIMARY KEY (DNI)
);

create table RUTA (
    Estacion varchar(30),
    CONSTRAINT ruta_pk PRIMARY KEY (Estacion)
);

create table RESERVA (
    ID_Reserva int(10),
    Precios int(10) not null,
    Horario_comedor varchar(20) not null,
    Fecha date not null,
    Excursiones_opcionales varchar(50) not null,
    Actividades_extra varchar(50) not null,
    DNI varchar(9) not null,
    Estacion varchar(30) not null, 
    CONSTRAINT reserva_pk PRIMARY KEY (ID_Reserva),
    CONSTRAINT reserva_client_fk FOREIGN KEY (DNI)
    references CLIENT (DNI),
    CONSTRAINT reserva_ruta_fk FOREIGN KEY (Estacion)
    references RUTA (Estacion)
);
-- Tabla para almacenar la relación N:N entre cliente y reserva

create table CHECKIN (
    DNI varchar(9),
    ID_Reserva int(10),
    CONSTRAINT checkin_pk PRIMARY KEY (DNI, ID_reserva),
    CONSTRAINT check_client_fk FOREIGN KEY (DNI)
    references CLIENT (DNI),
    CONSTRAINT check_reserva_fk FOREIGN KEY (ID_Reserva)
    references RESERVA (ID_Reserva)
);

create table PUERTO (
    ID_Puerto int(10),
    Localidad varchar(30),
    CONSTRAINT puerto_pk PRIMARY KEY (ID_Puerto)
);

create table LISTA_PUERTOS (
    Estacion varchar(30),
    ID_Puerto int(10),
    Situacion varchar(20) not null,
    ID_Lista int(10), 
    CONSTRAINT lista_puertos_pk PRIMARY KEY (ID_Lista),
    CONSTRAINT estacion_fk FOREIGN KEY (Estacion)
    references RUTA (Estacion),
    CONSTRAINT puerto_fk FOREIGN KEY (ID_Puerto)
    references PUERTO (ID_Puerto)
);
  

Комментарии:

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

2. Ошибка на изображении относится к таблице, которая не включена в ваш опубликованный код.

3. Насколько я помню, DB Fiddle явно не поддерживает Oracle. Писать SQL на платформе, отличной от вашей реальной целевой, не очень хорошая идея, потому что все продукты RDBMS имеют тонкие (и не очень тонкие) различия в синтаксисе. Используйте SQL Fiddle — если он запущен — или собственный LiveSQL от Oracle, который бесплатен, но требует входа в систему.

Ответ №1:

Проблема в INT(10) типе, который следует отредактировать в NUMBER(10) , согласно документации Oracle.

Это работает:

 CREATE TABLE CLIENT
(
    DNI                                     VARCHAR(9),
    Nombre                                  VARCHAR(20) NOT NULL,
    Fecha_nacimiento                        DATE NOT NULL,
    CONSTRAINT client_pk PRIMARY KEY(DNI)
);

CREATE TABLE RUTA
(
    Estacion                                VARCHAR(30),
    CONSTRAINT ruta_pk PRIMARY KEY(Estacion)
);

CREATE TABLE RESERVA
(
    ID_Reserva                              NUMBER(10),
    Precios                                 NUMBER(10) NOT NULL,
    Horario_comedor                         VARCHAR(20) NOT NULL,
    Fecha                                   DATE NOT NULL,
    Excursiones_opcionales                  VARCHAR(50) NOT NULL,
    Actividades_extra                       VARCHAR(50) NOT NULL,
    DNI                                     VARCHAR(9) NOT NULL,
    Estacion                                VARCHAR(30) NOT NULL,
    CONSTRAINT reserva_pk PRIMARY KEY(ID_Reserva),
    CONSTRAINT reserva_client_fk FOREIGN KEY(DNI) REFERENCES CLIENT(DNI),
    CONSTRAINT reserva_ruta_fk FOREIGN KEY(Estacion) REFERENCES RUTA(Estacion)
);

-- Tabla para almacenar la relación N:N entre cliente y reserva

CREATE TABLE CHECKIN
(
    DNI                                     VARCHAR(9),
    ID_Reserva                              NUMBER(10),
    CONSTRAINT checkin_pk PRIMARY KEY(DNI, ID_reserva),
    CONSTRAINT check_client_fk FOREIGN KEY(DNI) REFERENCES CLIENT(DNI),
    CONSTRAINT check_reserva_fk FOREIGN KEY(ID_Reserva) REFERENCES RESERVA(ID_Reserva)
);

CREATE TABLE PUERTO
(
    ID_Puerto                               NUMBER(10),
    Localidad                               VARCHAR(30),
    CONSTRAINT puerto_pk PRIMARY KEY(ID_Puerto)
);

CREATE TABLE LISTA_PUERTOS
(
    Estacion                                VARCHAR(30),
    ID_Puerto                               NUMBER(10),
    Situacion                               VARCHAR(20) NOT NULL,
    ID_Lista                                NUMBER(10),
    CONSTRAINT lista_puertos_pk PRIMARY KEY(ID_Lista),
    CONSTRAINT estacion_fk FOREIGN KEY(Estacion) REFERENCES RUTA(Estacion),
    CONSTRAINT puerto_fk FOREIGN KEY(ID_Puerto) REFERENCES PUERTO(ID_Puerto)
);
  

Комментарии:

1. Кроме того, хотя VARCHAR и VARCHAR2 в настоящее время являются синонимами, Oracle рекомендует использовать VARCHAR2 — docs.oracle.com/cd/B28359_01/server.111/b28318 /…