#oracle #oracle-sqldeveloper
#Oracle #oracle-sqldeveloper
Вопрос:
Я делаю тестовую базу данных для круизной компании. Дело в том, что я создал код в сетевой среде IDE (db-fiddle), но когда дело доходит до размещения его в 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 /…