Problema creando Base en PhpMyAdmin importando desde Fichero SQL


03 de Abril del 2021

Hola, estoy trabajando con XAMPP y estoy intentando hacer una Nueva Base de Datos desde [b]PHPMyAdmin[/b].

Uso la Opción de Crear Base de Datos nueva y luego la quiero hacer importando desde este archivo SQL:

[code]CREATE TABLE LIBROS(
COD_LIBRO VARCHAR2(10),
TITULO VARCHAR2(35) NOT NULL,
AUTOR VARCHAR2(30) NOT NULL,
TEMA VARCHAR2(15),
UNIDADES NUMBER(3) NOT NULL,
CONSTRAINT PK_LIBROS PRIMARY KEY (COD_LIBRO),
CONSTRAINT CK_TITULO CHECK (TITULO = UPPER(TITULO)),
CONSTRAINT CK_AUTOR CHECK (AUTOR = UPPER(AUTOR)),
CONSTRAINT CK_TEMA CHECK (TEMA = UPPER(TEMA)),
CONSTRAINT CK_UNIDADES CHECK (UNIDADES > 0 AND UNIDADES < 200)
);

CREATE TABLE SOCIOS(
COD_SOCIO NUMBER(6),
NOMBRE VARCHAR2(30) NOT NULL,
DIRECCION VARCHAR2(30),
PROVINCIA VARCHAR2(15),
TLF NUMBER(9) NOT NULL,
CONSTRAINT PK_SOCIOS PRIMARY KEY (COD_SOCIO),
CONSTRAINT CK_DIRECCION CHECK (DIRECCION=UPPER(DIRECCION)),
CONSTRAINT CK_PROVINCIA CHECK (PROVINCIA=UPPER(PROVINCIA)),
CONSTRAINT CK_TELEFONO CHECK (SUBSTR(TLF,1,1)=9)
);

CREATE TABLE PRESTAMO(
COD_SOCIO NUMBER(6),
COD_LIBRO VARCHAR2(10),
FECHA_PRESTAMO DATE DEFAULT SYSDATE,
CONSTRAINT PK_PRESTAMO PRIMARY KEY (COD_LIBRO,COD_SOCIO,FECHA_PRESTAMO),
CONSTRAINT FK_PREST_LIBRO FOREIGN KEY (COD_LIBRO) REFERENCES LIBROS ON DELETE CASCADE,
CONSTRAINT PK_PREST_SOCIOS FOREIGN KEY (COD_SOCIO) REFERENCES SOCIOS ON DELETE CASCADE
);

--------------- LLENAR LIBROS: -------------------------------
INSERT INTO LIBROS VALUES('IG-110','GUÍA DE MICROSOFT WORKS 3','HARLEY HAHN','WORKS',6);

INSERT INTO LIBROS VALUES('IG-111','MICROSOFT WORKS 3','JOANNE WOODCOCK','WORKS',4);

INSERT INTO LIBROS VALUES('IG-112','MANUAL DE BORLAND C++ 4.0','ANGULO, JOSÉ MARÍA','LENGUAJE C',10);

INSERT INTO LIBROS VALUES('IG-113','MICROPROCESADORES 32 BITS','ANGULO, JOSÉ MARÍA','ARQUITECTURA',5);

INSERT INTO LIBROS VALUES('IG-114','COMPUTADORAS 5ª GENERACIÓN','BISHOP, PETER','ARQUITECTURA',6);

INSERT INTO LIBROS VALUES('IG-115','LIBRO DE EXCEL 97','JOHN WALKENBACH','EXCEL',7);

INSERT INTO LIBROS VALUES('IG-116','EXCEL 4 PARA WINDOWS-(99%)','SUSANA LINARES','EXCEL',10);

INSERT INTO LIBROS VALUES('IG-117','APLIQUE TURBO C++','SCHILDT H.','LENGUAJE C',4);

INSERT INTO LIBROS VALUES('IG-118','PROGRAMACIÓN EN C++','ENRIQUE Y JOSÉ HERNÁNDEZ','LENGUAJE C',6);

INSERT INTO LIBROS VALUES('IG-119','PUESTA A PUNTO DE ORACLE','ABBEY, J COREY','ORACLE',5);

INSERT INTO LIBROS VALUES('IG-120','ORACLE 7. MANUAL DE REFERENCIA','GEORGE KOCH','ORACLE',8);

INSERT INTO LIBROS VALUES('IG-121','ORACLE GUÍA DE APRENDIZAJE 7','ABBEY, J COREY','ORACLE',9);


INSERT INTO LIBROS VALUES('IG-122','TÉCNICAS DE PROGRAMACIÓN','F. ALONSO','PROGRAMACIÓN',8);

INSERT INTO LIBROS VALUES('IG-123','METODOLOGÍA DE LA PROGRAMACIÓN','D. ALONSO Y S. RUMEU','PROGRAMACIÓN',5);

INSERT INTO LIBROS VALUES('IG-124','PROGRAMACIÓN ORIENTADA A OBJ','MORALES Y SEGOVIA','PROGRAMACIÓN',7);

-----------------------------------------------------------
------------ LLENAR SOCIOS: ---------------------------
INSERT INTO SOCIOS VALUES(200,'JUAN MARTÍNEZ','LA ALAMEDA 15','MADRID',9166766);

INSERT INTO SOCIOS VALUES(210,'PEDRO PÉREZ','LA HOSPEDERÍA, 5','TOLEDO',94586766);

INSERT INTO SOCIOS VALUES(220,'ANA GARCÍA','DEL HOSPITAL, 10','VALENCIA',9665766);

INSERT INTO SOCIOS VALUES(223,'JAVIER SÁNCHEZ','LOS BARRIOS S/N','TOLEDO',9256766);

INSERT INTO SOCIOS VALUES(226,'ALICIA MORALES','LA MARIPOSA 89','MADRID',9198766);

INSERT INTO SOCIOS VALUES(229,'JUANA LOPEZ','EL SALTAMONTES 315','MADRID',9716796);

INSERT INTO SOCIOS VALUES(230,'FRANCISCO PONCE','LA MARCHA, 21','MADRID',91445566);

-----------------------------------------------------------
------------ LLENAR PRÉSTAMO: ---------------------------
-- SE CAMBIA LA FECHA PARA ALMACENAR EL AÑO CORRECTAMENTE

ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';

INSERT INTO PRESTAMO VALUES(200,'IG-114','10/10/2005');
INSERT INTO PRESTAMO VALUES(200,'IG-117','16/10/2005');
INSERT INTO PRESTAMO VALUES(200,'IG-119','17/10/2005');

INSERT INTO PRESTAMO VALUES(210,'IG-115','8/10/2005');
INSERT INTO PRESTAMO VALUES(210,'IG-117','10/10/2005');
INSERT INTO PRESTAMO VALUES(210,'IG-120','12/10/2005');
INSERT INTO PRESTAMO VALUES(210,'IG-121','12/10/2005');

INSERT INTO PRESTAMO VALUES(223,'IG-116','15/10/2005');
INSERT INTO PRESTAMO VALUES(223,'IG-117','17/10/2005');

INSERT INTO PRESTAMO VALUES(226,'IG-114','13/10/2005');
INSERT INTO PRESTAMO VALUES(226,'IG-115','15/10/2005');

INSERT INTO PRESTAMO VALUES(229,'IG-115','17/10/2005');
INSERT INTO PRESTAMO VALUES(229,'IG-120','18/10/2005');
INSERT INTO PRESTAMO VALUES(229,'IG-122','18/10/2005');

INSERT INTO PRESTAMO VALUES(230,'IG-114','10/10/2005');
INSERT INTO PRESTAMO VALUES(230,'IG-118','17/10/2005');
INSERT INTO PRESTAMO VALUES(230,'IG-119','19/10/2005');
INSERT INTO PRESTAMO VALUES(230,'IG-123','20/10/2005');

-------------------------------------------------------------------
-- DEJAMOS LA FECHA EN EL FORMATO NORMAL.

ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YY';[/code]

Pero me aparecen un montón de errores que no sé como resolver...

Lo que quiero es tener creada una Base de Datos que se llame BIBLIOTECA con esas 3 Tablas:

- LIBROS
- SOCIOS
- PRESTAMOS

Pero me estoy volviendo loco y no sé cómo hacerlo y/o qué hago mal... .-(

Gracias & Saludetes. ;-)

 

pD. A lo mejor alguno tiene ya incluso está BBDD hecha ya que debe ser mítica... XD


Jota CT
12 de Agosto del 2026

Hola,

El problema de fondo es que ese script SQL está escrito en el dialecto de Oracle, no en el de MySQL. phpMyAdmin lo intenta ejecutar tal cual contra un servidor MySQL, y varias instrucciones simplemente no existen ahí, por eso el montón de errores.

Las incompatibilidades concretas que veo en tu script:

VARCHAR2(n) no existe en MySQL. Es un tipo propio de Oracle. En MySQL se usa VARCHAR(n) a secas.

NUMBER(n) tampoco existe en MySQL. Según el caso, el equivalente es INT (para COD_SOCIO NUMBER(6), por ejemplo) o DECIMAL(n,d) si necesitas decimales.

ALTER SESSION SET NLS_DATE_FORMAT = '...' es sintaxis exclusiva de Oracle, sirve para decirle a Oracle cómo interpretar las fechas en formato texto durante esa sesión. MySQL no tiene un equivalente de sesión así; en su lugar, cada fecha se convierte explícitamente con STR_TO_DATE, o directamente se escribe en formato 'AAAA-MM-DD', que MySQL reconoce sin conversión:

INSERT INTO PRESTAMO VALUES (200, 'IG-114', STR_TO_DATE('10/10/2005', '%d/%m/%Y'));
-- o, mas simple, si puedes escribir la fecha directamente:
INSERT INTO PRESTAMO VALUES (200, 'IG-114', '2005-10-10');

Con esos cambios, tu tabla LIBROS quedaría así en MySQL:

CREATE TABLE LIBROS (
    COD_LIBRO VARCHAR(10),
    TITULO VARCHAR(35) NOT NULL,
    AUTOR VARCHAR(30) NOT NULL,
    TEMA VARCHAR(15),
    UNIDADES INT NOT NULL,
    CONSTRAINT PK_LIBROS PRIMARY KEY (COD_LIBRO),
    CONSTRAINT CK_TITULO CHECK (TITULO = UPPER(TITULO)),
    CONSTRAINT CK_AUTOR CHECK (AUTOR = UPPER(AUTOR)),
    CONSTRAINT CK_TEMA CHECK (TEMA = UPPER(TEMA)),
    CONSTRAINT CK_UNIDADES CHECK (UNIDADES > 0 AND UNIDADES < 200)
);

El resto de la estructura (PRIMARY KEY, FOREIGN KEY ... ON DELETE CASCADE, los propios CHECK) es válida en MySQL sin cambios, el problema estaba solo en los tipos de datos y en la línea de ALTER SESSION.

Un detalle aparte que no tiene que ver con Oracle: veo que el texto que has pegado incluye etiquetas [b] y [code]/[/code], que son de BBCode (código de foros antiguos), no de SQL. Si al copiar el script para pegarlo en phpMyAdmin se cuelan esas etiquetas literalmente, también darían error, así que asegúrate de pegar solo el SQL puro, sin esas marcas.

Un saludo,
Jota CT