Está en la página 1de 10

SQL*PLUS 10.

EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS

1. Crear las siguientes tablas de acuerdo con las restricciones que se mencionan:

Tabla TIENDAS

Campo tipo long NULOS?

NIF ALFANUM 10 NO ADMITE


NOMBRE ALFANUM 20
DIRECCION ALFANUM 20
POBLACION ALFANUM 20
PROVINCIA ALFANUM 20
COD_POSTAL NUMERICO 5

 La clave primaria es NIF


 PROVINCIA ha de almacenarse en mayúsculas.

Tabla FABRICANTES

Campo tipo long NULOS?

COD_FABRICANTE NUMERICO 3 NO ADMITE


NOMBRE ALFANUM 15
PAIS ALFANUM 15

 La clave primaria es COD_FABRICANTE


 Las columnas NOMBRE y PAIS han de almacenarse en mayúsculas.

Tabla ARTICULOS

Campo tipo long NULOS?

ARTICULO ALFANUM 20 NO ADMITE


COD_FABRICANTE NUMERICO 3 NO ADMITE
PESO NUMERICO 3 NO ADMITE
CATEGORIA ALFANUM 10 NO ADMITE
PRECIO_VENTA NUMERICO 4
PRECIO_COSTO NUMERICO 4
EXISTENCIAS NUMERICO 5

 La clave primaria está formada por las columnas ARTICULO, COD_FABRICANTE, PESO y
CAREGORIA
 COD_FABRICANTE es clave ajena que refencia a la tabla FABRICANTES
 PRECIO_VENTA, PRECIO_COSTO y PESO han de ser >0.
 CATEGORIA ha de ser ‘primera’, ‘segunda’ o ‘tercera’

Página 1 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS

Tabla PEDIDOS

Campo tipo long NULOS?

NIF ALFANUM 10 NO ADMITE


ARTICULO ALFANUM 20 NO ADMITE
COD_FABRICANTE NUMERICO 3 NO ADMITE
PESO NUMERICO 3 NO ADMITE
CATEGORIA ALFANUM 10 NO ADMITE
FECHA_PEDIDO FECHA NO ADMITE
UNIDADES_PEDIDAS NUMERICO 4 NO ADMITE

 La clave primaria está formada por las columnas NIF, ARTICULO, COD_FABRICANTE, PESO,
CATEGORIA Y FECHA_PEDIDO
 COD_FABRICANTE es clave ajena que referencia a la tabla FABRICANTES
 Las columnas ARTICULO, COD_FABRICANTE, PESO y CATEGORIA son clave ajena y referencian
a la tabla ARTICULOS. Realizar un borrado en cascada.
 NIF es clave ajena y referencia a la tabla TIENDAS
 UNIDADES_PEDIDAS ha de ser >0
 CATEGORIA ha de ser ‘primera’, ‘segunda’ o ‘tercera’.

Tabla VENTAS

Campo tipo long NULOS?

NIF ALFANUM 10 NO ADMITE


ARTICULO ALFANUM 20 NO ADMITE
COD_FABRICANTE NUMERICO 3 NO ADMITE
PESO NUMERICO 3 NO ADMITE
CATEGORIA ALFANUM 10 NO ADMITE
FECHA_VENTA FECHA NO ADMITE
UNIDADES_VENDIDAS NUMERICO 4

 La clave primaria está formada por las columnas NIF, ARTICULO, COD_FABRICANTE, PESO,
CATEGORIA, y FECHA_VENTA.
 COD_FABRICANTE es clave ajena que referencia a la tabla FABRICANTES.
 Las columnas ARTICULO, COD_FABRICANTE, PESO Y CATEGORIA son clave ajena y referencian a la
tabla ARTICULOS. Realizar un borrado en cascada.
 NIF es clave ajena y referencia a la tabla TIENDAS
 UNIDADES_VENDIDAS ha de ser >0
 CATEGORIA ha de ser ‘primera’, ‘segunda’ o ‘tercera’

Página 2 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS

CREATE TABLE TIENDAS


(
NIF VARCHAR2(10) ,
NOMBRE VARCHAR2(20),
DIRECCIÓN VARCHAR2(20),
POBLACIÓN VARCHAR2(20),
PROVINCIA VARCHAR2(20),
CODPOSTAL NUMBER(5),
Constraint tiendas_pk PRIMARY KEY(NIF),
Constraint tiendas_provincia_mayusculas CHECK(PROVINCIA=UPPER(PROVINCIA))
);

CREATE TABLE FABRICANTES


(
COD_FABRICANTE NUMBER(3),
NOMBRE VARCHAR2(15),
PAIS VARCHAR2(15),
Constraint fabricantes_pk PRIMARY KEY(COD_FABRICANTE),
Constraint fabricantes_nombre_mayusculas CHECK (NOMBRE=UPPER(NOMBRE)),
Constraint fabricantes_pais_mayusculas CHECK(PAIS=UPPER(PAIS))
);

CREATE TABLE ARTICULOS


(
ARTICULO VARCHAR2(20),
COD_FABRICANTE NUMBER(3),
PESO NUMBER(3),
CATEGORIA VARCHAR2(10),
PRECIO_VENTA NUMBER (4),
PRECIO_COSTO NUMBER (4),
EXISTENCIAS NUMBER (5),
Constraint articulos_pk PRIMARY KEY (ARTICULO, COD_FABRICANTE, PESO, CATEGORIA),
Constraint articulos_cod_fabricante_fk FOREIGN KEY (COD_FABRICANTE)
REFERENCES FABRICANTES(COD_FABRICANTE),
Constraint articulos_peso_positivo CHECK(PESO>0),
Constraint articulos_prec_ven_pos CHECK(PRECIO_VENTA>0),
Constraint articulos_prec_cos_pos CHECK(PRECIO_COSTO>0),
Constraint articulos_cat_p_s_t CHECK(CATEGORIA IN('Primera','Segunda', 'Tercera'))
);

Página 3 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS

CREATE TABLE PEDIDOS


(
NIF VARCHAR2(10),
ARTICULO VARCHAR2(20) ,
COD_FABRICANTE NUMBER(3),
PESO NUMBER(3)
constraint pedidos_peso_sinnulos NOT NULL,
CATEGORIA VARCHAR2(10),
FECHA_PEDIDO DATE ,
UNIDADES_PEDIDAS NUMBER(4)
constraint pedidos_unid_ped_sinnulos NOT NULL,
Constraint pedidos_pk PRIMARY KEY (NIF,ARTICULO, COD_FABRICANTE, PESO,CATEGORIA, FECHA_PEDIDO),
Constraint pedidos_cod_fabricante_fk FOREIGN KEY(COD_FABRICANTE)
REFERENCES FABRICANTES(COD_FABRICANTE),
Constraint pedidos_ar_cod_fa_pe_ca_fk FOREIGN KEY (ARTICULO, COD_FABRICANTE, PESO, CATEGORIA)
REFERENCES ARTICULOS(ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) on delete cascade,
Constraint pedidos_nif_fk FOREIGN KEY (NIF)
REFERENCES TIENDAS(NIF),
Constraint pedidos_unid_ped_pos CHECK(UNIDADES_PEDIDAS>0),
Constraint pedidos_categoria_p_s_t CHECK(CATEGORIA IN('Primera','Segunda', 'Tercera'))
);

CREATE TABLE VENTAS


(
NIF VARCHAR2(10),
ARTICULO VARCHAR2(20) ,
COD_FABRICANTE NUMBER(3),
PESO NUMBER(3),
CATEGORIA VARCHAR2(10) ,
FECHA_VENTA DATE ,
UNIDADES_VENDIDAS NUMBER(4),
Constraint ventas_pk PRIMARY KEY (NIF,ARTICULO,COD_FABRICANTE, PESO, CATEGORIA, FECHA_VENTA),
Constraint ventas_cod_fabricante_fk FOREIGN KEY (COD_FABRICANTE)
REFERENCES FABRICANTES(COD_FABRICANTE),
Constraint ventas_ar_cod_fa_pe_cat_fk FOREIGN KEY (ARTICULO, COD_FABRICANTE, PESO, CATEGORIA)
REFERENCES ARTICULOS (ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) ON DELETE CASCADE,
Constraint ventas_nif_fk FOREIGN KEY (NIF)
REFERENCES TIENDAS (NIF),
Constraint ventas_unid_vend_pos CHECK(UNIDADES_VENDIDAS>0),
Constraint ventas_categoria_p_s_t CHECK(CATEGORIA IN('Primera','Segunda', 'Tercera'))
);

2º. Añadir una restriccion a la tabla TIENDAS para que el NOMBRE de la tienda sea del tipo
titulo.

ALTER TABLE TIENDAS


ADD CONSTRAINT Tiendas_nombre_titulo CHECK (NOMBRE=INITCAP(NOMBRE));

Página 4 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS

3º.- visualizar las constraints definidas para las tablas anteriores.

SELECT TABLE_NAME, CONSTRAINT_NAME


FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN ('ARTICULOS','TIENDAS', 'FABRICANTES', 'PEDIDOS' ,'VENTAS');

4º.- modificar las columnas de las tablas PEDIDOS y VENTAS para que las
UNIDADES_VENDIDAS y las UNIDADES_PEDIDAS puedan almacenar cantidades numéricas de
6 dígitos.

ALTER TABLE PEDIDOS


MODIFY (UNIDADES_PEDIDAS NUMBER(6));

ALTER TABLE VENTAS


MODIFY (UNIDADES_VENDIDAS NUMBER(6));

5º. Impedir que se den de alta mas tiendas en la provincia de ‘TOLEDO’.

ALTER TABLE TIENDAS


ADD CONSTRAINT tiendas_no_mas_toledo CHECK (PROVINCIA !='TOLEDO');

6º.- Añadir a las tablas PEDIDOS y VENTAS una nueva columna para que almacenen el PVP
del articulo.

ALTER TABLE PEDIDOS


ADD(PVP NUMBER(4));

ALTER TABLE VENTAS


ADD(PVP NUMBER(4));

7º.- Añadir el siguiente comentario a la tabla VENTAS: Unidades vendidas de los distintos
artículos de los fabricantes

Comment on table ventas is ‘Unidades vendidas de los distintos artículos de los fabricantes ‘;

8º.- Añadir el siguiente comentario al campo PESO de la tabla PEDIDOS ‘peso del articulo
pedido’

Comment on column pedidos.peso is ‘peso del articulo pedido’;

9º.- Crear un sinonimo llamado PED para la tabla pedidos

CREATE SYNONYM PED FOR DAI2T13.PEDIDOS

Página 5 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS

10º.- cambiar de nombre a la tabla ventas y llamarla nuevas_ventas.

RENAME VENTAS TO NUEVAS_VENTAS;

11º..- Borrar la tabla Tiendas.

DROP TABLE TIENDAS CASCADE CONSTRAINTS;

12º Cree el siguiente modelo de datos:

SOCIOS
Cod_socio nombre apellidos domicilio poblacion Cod_postal provincia telefono sexo observaciones
10300106 Santiago Blanco Ruiz Balmes 36 Llodio 01400 Álava 4531221 H Todos los meses
compra dos pelis
11369214 Carlos Flores Vargas Potosí 13 Alcorcon 28921 Madrid 5436785 H
17269813 Ana Lopez Mayor 43 Ulldecona 43550 Tarragona 897654 M Devuelve las pelis sin
Pintado rebobinar

TEMAS

Cod_tema tema
1 Suspense
2 terror
3 Histórica
4 Drama
5 Ciencia-ficcion

PELICULAS

Cod_pelicula titulo Interprete_1 Interprete_2


1 El color púrpura Danny Glover Whoopi Goldberg
2 A Proposito de Henry Harrison Ford Anette Bening
3 J.F.K. Kevin Costner Sissy Spacek

Director productora Cod_tema Año_produccion duracion Precio_coste


Steven Spielberg Warner Bros 5 1985 148 18
Mike Nichols Columbia Pictures 4 1991 108 15
Oliver Stone Warner Bros 3 1991 189 20

Página 6 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS

ALQUILER

Cod_alquiler Cod_socio Cod_pelicula Fecha_alquiler Fecha_devolucion devuelta precio


1 10300106 1 12/10/1998 18/10/1998 si 5
2 11369214 2 09/09/2000 15/09/2000 no 6
3 17269813 3 23/04/2002 01/05/2002 si 6
4 10300106 2 16/07/2004 25/07/2004 no 6
5 11369214 3 15/03/2006 18/03/2006 si 7
6 17269813 1 08/01/2007 15/01/2007 si 7

Añadiendo las Constraint que no sean de primary key, foreign key o no admitir nulos
después de crear las tablas.

CREATE TABLE SOCIOS


(
COD_SOCIO VARCHAR2(8),
NOMBRE VARCHAR2(15)
CONSTRAINT socios_nombre_no_nulo NOT NULL,
APELLIDOS VARCHAR2(30)
CONSTRAINT socios_apellido_no_nulo NOT NULL,
DOMICILIO VARCHAR2(20),
POBLACIÓN VARCHAR2(20),
COD_POSTAL VARCHAR2(5),
PROVINCIA VARCHAR2(15),
TELEFONO VARCHAR2(7)
CONSTRAINT socios_telefono_no_nulo NOT NULL,
SEXO CHAR(1)
CONSTRAINT socios_sexo_no_nulo NOT NULL,
OBSERVACIONES LONG,

CONSTRAINT socios_pk PRIMARY KEY(COD_SOCIO)


);

ALTER TABLE SOCIOS


ADD(CONSTRAINT socios_codSocio_num CHECK(COD_SOCIO BETWEEN 00000000 AND 99999999),
CONSTRAINT socios_codPostal_longuitud CHECK(LENGTH(COD_POSTAL)=5),
CONSTRAINT socios_codPostal_num CHECK(COD_POSTAL BETWEEN 00000 AND 99999),
CONSTRAINT socios_sexo_en_mayuscula CHECK(SEXO=UPPER(SEXO)),
CONSTRAINT socios_sexo_H_M CHECK(SEXO IN ('H','M')),
CONSTRAINT socios_telefono_num CHECK(TELEFONO BETWEEN 0000000 AND 9999999),
CONSTRAINT socios_telefono_unico UNIQUE(TELEFONO)
);

CREATE TABLE TEMAS

Página 7 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS
(
COD_TEMA VARCHAR2(2),
TEMA VARCHAR2(20)
CONSTRAINT tema_nombreTema_no_nulo NOT NULL,

CONSTRAINT tema_pk PRIMARY KEY(COD_TEMA)


);

ALTER TABLE TEMAS


ADD CONSTRAINT temas_codTema_num CHECK(COD_TEMA BETWEEN 00 AND 99);

CREATE TABLE PELICULAS


(
COD_PELICULA VARCHAR2(2),
TITULO VARCHAR2(20)
CONSTRAINT peliculas_titulo_no_nulo NOT NULL,
INTERPRETE_1 VARCHAR2(25)
CONSTRAINT peliculas_interprete1_no_nulo NOT NULL,
INTERPRETE_2 VARCHAR2(25),
DIRECTOR VARCHAR2(20)
CONSTRAINT peliculas_director_no_nulo NOT NULL,
PRODUCTORA VARCHAR2(20),
COD_TEMA VARCHAR2(2)
CONSTRAINT peliculas_codTema_no_nulo NOT NULL,
AÑO_PRODUCCION VARCHAR2(4),
DURACION NUMBER(3)
CONSTRAINT peliculas_duracion_no_nula NOT NULL,
PRECIO_COSTE NUMBER(2)
CONSTRAINT peliculas_precio_no_nulo NOT NULL,

CONSTRAINT peliculas_pk PRIMARY KEY(COD_PELICULA),


CONSTRAINT peliculas_cod_tema_fk FOREIGN KEY(COD_TEMA)
REFERENCES TEMAS(COD_TEMA)
);

ALTER TABLE PELICULAS


ADD (CONSTRAINT peliculas_cod_pelicula_num CHECK(COD_PELICULA BETWEEN 00 AND 99),
CONSTRAINT peliculas_duracion_positiva CHECK(DURACION>0),
CONSTRAINT peliculas_año_pro_val CHECK(AÑO_PRODUCCION BETWEEN 1800 AND 2022),
CONSTRAINT peliculas_precio_positivo CHECK(PRECIO_COSTE>0),
CONSTRAINT peliculas_codTema_num CHECK(COD_TEMA BETWEEN 00 AND 99)
);

CREATE TABLE ALQUILER

Página 8 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS
(
COD_ALQUILER VARCHAR2(2),
COD_SOCIO VARCHAR2(8)
CONSTRAINT alquiler_codSocio_no_nulo NOT NULL,
COD_PELICULA VARCHAR(2)
CONSTRAINT alquiler_codPelicula_no_nulo NOT NULL,
FECHA_ALQUILER DATE
CONSTRAINT alquiler_fecha_no_nula NOT NULL,
FECHA_DEVOLUCION DATE
CONSTRAINT alquiler_fechaDev_no_nula NOT NULL,
DEVUELTA CHAR(2)
CONSTRAINT alquiler_devuelta_no_nulo NOT NULL,
PRECIO NUMBER(2)
CONSTRAINT alquiler_precio_no_nulo NOT NULL,

CONSTRAINT alquiler_pk PRIMARY KEY(COD_ALQUILER),


CONSTRAINT alquiler_cod_socio_fk FOREIGN KEY(COD_SOCIO)
REFERENCES SOCIOS(COD_SOCIO),
CONSTRAINT alquiler_cod_pelicula_fk FOREIGN KEY(COD_PELICULA)
REFERENCES PELICULAS(COD_PELICULA)
);

ALTER TABLE ALQUILER


ADD (CONSTRAINT alquiler_codAlquiler_num CHECK(COD_ALQUILER BETWEEN 00 AND 99),
CONSTRAINT alquiler_codSocio_num CHECK(COD_SOCIO BETWEEN 00000000 AND 99999999),
CONSTRAINT alquiler_cod_pelicula_num CHECK(COD_PELICULA BETWEEN 00 AND 99),
CONSTRAINT alquiler_devolucion_s_n CHECK(DEVUELTA IN ('si','no')),
CONSTRAINT alquiler_precio_positivo CHECK(PRECIO>0),
CONSTRAINT alquiler_fechadevolucion_mayor CHECK(FECHA_ALQUILER<FECHA_DEVOLUCION)
);

13º.- modificar las columnas de las tablas TEMAS y PELICULAS para que las Cod_tema
puedan almacenar cantidades numéricas de 4 dígitos.

ALTER TABLE TEMAS


MODIFY (COD_TEMA NUMBER(4));

ALTER TABLE PELICULAS


MODIFY (COD_TEMA NUMBER(4));

14.-Nos mosqueamos con el proveedor de películas de la productora Warner Bros. Impedir

Página 9 de 10
SQL*PLUS 10. EJERCICIOS RESUELTOS MANIPULACIÓN TABLAS
que se den de alta más películas de dicha productora en la tabla películas.

ALTER TABLE PELICULAS


ADD CONSTRAINT peliculas_no_mas_warner CHECK (PRODUCTORA !='Warner Bros');

Si ya hemos introduccido datos

ALTER TABLE PELICULAS


ADD CONSTRAINT peliculas_no_mas_warner CHECK (PRODUCTORA !='Warner Bros') ENABLE
NOVALIDATE;

15º.- Añadir el siguiente comentario a la tabla PELICULAS: “Peliculas producidas a partir


de la segunda mitad del siglo XX”

Comment on table peliculas is ‘peliculas producidas a partir de la segunda mitad del siglo XX ‘;

16º.- añadir el siguiente comentario al campo interprete_1 de la tabla PELICULAS: ‘actor


principal’

Comment on column películas.interprete_1 is ‘actor principal’;

17.- crear un sinónimo llamado ALQ para la tabla ALQUILER

CREATE SYNONYM ALQ FOR ALQUILER

18.- Cambiar de nombre a la tabla SOCIOS y llamarla SOCIOS_NUEVOS

RENAME SOCIOS TO SOCIOS_NUEVOS;

19.- Borrar la tabla PELICULAS

DROP TABLE PELICULAS CASCADE CONSTRAINTS;

Página 10 de 10

También podría gustarte