SQL> @creaBD_Piezas SQL> SQL> /* Crear las tablas y alguna vista, a modo de ejemplo DOC>*/ SQL> CREATE TABLE Pieza ( 2 clvPieza NUMBER(9) PRIMARY KEY, 3 nombPieza CHAR(32) NOT NULL, 4 color CHAR(32)); Table created. SQL> SQL> CREATE TABLE Proveedor ( 2 clvProv NUMBER(9) PRIMARY KEY, 3 nombProv CHAR(32) NOT NULL); Table created. SQL> SQL> CREATE TABLE suministrar ( 2 clvProv NUMBER(9), 3 clvPieza NUMBER(9), 4 PRIMARY KEY (clvProv, clvPieza), 5 FOREIGN KEY (clvProv) REFERENCES Proveedor(clvProv), 6 FOREIGN KEY (clvPieza) REFERENCES Pieza(clvPieza)); Table created. SQL> SQL> CREATE VIEW infoSuministros AS 2 SELECT nombProv, nombPieza 3 FROM Proveedor V, suministrar S, Pieza P 4 WHERE V.clvProv = S.clvProv AND S.clvPieza = P.clvPieza; View created. SQL> SQL> /* mostrar la información básica de las tablas y vistas DOC>*/ SQL> @infoBD_Piezas.sql SQL> /* @infoBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar la información básica de las tablas y vistas DOC>*/ SQL> SELECT * FROM CAT; TABLE_NAME TABLE_TYPE ------------------------------ ----------- INFOSUMINISTROS VIEW PIEZA TABLE PROVEEDOR TABLE SUMINISTRAR TABLE SQL> SQL> DESCRIBE Proveedor; Name Null? Type ----------------------------------------- -------- ---------------------------- CLVPROV NOT NULL NUMBER(9) NOMBPROV NOT NULL CHAR(32) SQL> DESCRIBE Pieza; Name Null? Type ----------------------------------------- -------- ---------------------------- CLVPIEZA NOT NULL NUMBER(9) NOMBPIEZA NOT NULL CHAR(32) COLOR CHAR(32) SQL> DESCRIBE suministrar; Name Null? Type ----------------------------------------- -------- ---------------------------- CLVPROV NOT NULL NUMBER(9) CLVPIEZA NOT NULL NUMBER(9) SQL> DESCRIBE infoSuministros; Name Null? Type ----------------------------------------- -------- ---------------------------- NOMBPROV NOT NULL CHAR(32) NOMBPIEZA NOT NULL CHAR(32) SQL> SQL> @infoBD_Piezas SQL> /* @infoBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar la información básica de las tablas y vistas DOC>*/ SQL> SELECT * FROM CAT; TABLE_NAME TABLE_TYPE ------------------------------ ----------- INFOSUMINISTROS VIEW PIEZA TABLE PROVEEDOR TABLE SUMINISTRAR TABLE SQL> SQL> DESCRIBE Proveedor; Name Null? Type ----------------------------------------- -------- ---------------------------- CLVPROV NOT NULL NUMBER(9) NOMBPROV NOT NULL CHAR(32) SQL> DESCRIBE Pieza; Name Null? Type ----------------------------------------- -------- ---------------------------- CLVPIEZA NOT NULL NUMBER(9) NOMBPIEZA NOT NULL CHAR(32) COLOR CHAR(32) SQL> DESCRIBE suministrar; Name Null? Type ----------------------------------------- -------- ---------------------------- CLVPROV NOT NULL NUMBER(9) CLVPIEZA NOT NULL NUMBER(9) SQL> DESCRIBE infoSuministros; Name Null? Type ----------------------------------------- -------- ---------------------------- NOMBPROV NOT NULL CHAR(32) NOMBPIEZA NOT NULL CHAR(32) SQL> SQL> @ponDatBD_Piezas SQL> /* @ponDatBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar los datos existentes en las tablas DOC>*/ SQL> @elimDatBD_Piezas.sql SQL> /* @elimDatBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar los datos de las tablas DOC>*/ SQL> SQL> DELETE FROM suministrar; 0 rows deleted. SQL> SQL> DELETE FROM Pieza; 0 rows deleted. SQL> SQL> DELETE FROM Proveedor; 0 rows deleted. SQL> SQL> /* mostrar los datos de las tablas y vista DOC>*/ SQL> @verDatBD_Piezas.sql SQL> /* @verDatBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar los datos de las tablas y vista DOC>*/ SQL> SELECT * FROM Pieza; no rows selected SQL> SQL> SELECT * FROM Proveedor; no rows selected SQL> SQL> SELECT * FROM suministrar; no rows selected SQL> SQL> SELECT * FROM infoSuministros; no rows selected SQL> SQL> /* añadir algunos datos a las tablas, para probar DOC>*/ SQL> SET ECHO OFF 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. 1 row created. SQL> SQL> /* mostrar los datos de las tablas y vista DOC>*/ SQL> @verDatBD_Piezas.sql SQL> /* @verDatBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar los datos de las tablas y vista DOC>*/ SQL> SELECT * FROM Pieza; CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 91 TUERCA ROJO 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJO 95 TUERCA AZUL 96 PALANCA 97 TUBO GRIS 7 rows selected. SQL> SQL> SELECT * FROM Proveedor; CLVPROV NOMBPROV ---------- -------------------------------- 1 PEREZ 2 LOPEZ 3 MARTINEZ SQL> SQL> SELECT * FROM suministrar; CLVPROV CLVPIEZA ---------- ---------- 1 91 1 92 2 92 2 93 2 94 1 95 6 rows selected. SQL> SQL> SELECT * FROM infoSuministros; NOMBPROV NOMBPIEZA -------------------------------- -------------------------------- PEREZ TUERCA PEREZ TUERCA LOPEZ TUERCA LOPEZ TORNILLO LOPEZ TORNILLO PEREZ TUERCA 6 rows selected. SQL> @verDatBD_Piezas SQL> /* @verDatBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar los datos de las tablas y vista DOC>*/ SQL> SELECT * FROM Pieza; CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 91 TUERCA ROJO 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJO 95 TUERCA AZUL 96 PALANCA 97 TUBO GRIS 7 rows selected. SQL> SQL> SELECT * FROM Proveedor; CLVPROV NOMBPROV ---------- -------------------------------- 1 PEREZ 2 LOPEZ 3 MARTINEZ SQL> SQL> SELECT * FROM suministrar; CLVPROV CLVPIEZA ---------- ---------- 1 91 1 92 2 92 2 93 2 94 1 95 6 rows selected. SQL> SQL> SELECT * FROM infoSuministros; NOMBPROV NOMBPIEZA -------------------------------- -------------------------------- PEREZ TUERCA PEREZ TUERCA LOPEZ TUERCA LOPEZ TORNILLO LOPEZ TORNILLO PEREZ TUERCA 6 rows selected. SQL> @PL_SQL_1 SQL> /* @PL_SQL_1.sql */ SQL> SET ECHO ON SQL> SET LINESIZE 132 SQL> SET PAGESIZE 80 SQL> SET WRAP OFF SQL> SQL> /* seleccionar los proveedores que suministran mas de una pieza */ SQL> SQL> /* creación de una tabla temporal para resultado (refProv, totPiezas) */ SQL> CREATE TABLE temp (refProv number, totPiezas number); Table created. SQL> SQL> DECLARE 2 laRefProv number; 3 numPiezas number; 4 5 CURSOR selProv IS SELECT distinct clvProv FROM Suministrar; 6 7 BEGIN 8 OPEN selProv; 9 LOOP 10 FETCH selProv INTO laRefProv; 11 12 EXIT WHEN selProv%NOTFOUND; 13 14 SELECT count(distinct clvPieza) INTO numPiezas 15 FROM Suministrar 16 WHERE clvProv = laRefProv; 17 18 IF numPiezas > 1 THEN 19 INSERT INTO temp VALUES (laRefProv, numPiezas); 20 END IF; 21 END LOOP; 22 COMMIT; 23 END; 24 . SQL> / PL/SQL procedure successfully completed. SQL> SELECT * FROM temp; REFPROV TOTPIEZAS ---------- ---------- 1 3 2 3 SQL> SQL> DROP TABLE temp; Table dropped. SQL> @PL_SQL_2 SQL> /* @PL_SQL_2.sql */ SQL> SET ECHO ON SQL> SET LINESIZE 132 SQL> SET PAGESIZE 80 SQL> SET WRAP OFF SQL> SQL> /* contar los proveedores que suministran mas de una pieza */ SQL> SQL> VARIABLE contador NUMBER; SQL> SQL> /* especificación del bloque PL/SQL DOC>*/ SQL> DECLARE 2 laRefProv NUMBER; 3 numPiezas NUMBER; 4 5 CURSOR selProv IS SELECT distinct clvProv FROM Suministrar; 6 7 BEGIN 8 :contador := 0; 9 OPEN selProv; 10 LOOP 11 FETCH selProv INTO laRefProv; 12 13 EXIT WHEN selProv%NOTFOUND; 14 15 SELECT count(distinct clvPieza) INTO numPiezas 16 FROM Suministrar 17 WHERE clvProv = laRefProv; 18 19 IF numPiezas > 1 THEN 20 :contador := :contador + 1; 21 END IF; 22 END LOOP; 23 COMMIT; 24 END; 25 / PL/SQL procedure successfully completed. SQL> SQL> PRINT contador CONTADOR ---------- 2 SQL> @pregBD_Piezas SQL> /* @pregBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* Piezas de color 'verde' DOC>*/ SQL> SELECT * FROM Pieza WHERE color = 'VERDE'; CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 92 TUERCA VERDE SQL> SQL> /* Nombres de todas las piezas DOC>*/ SQL> SELECT DISTINCT nombPieza FROM Pieza; NOMBPIEZA -------------------------------- PALANCA TORNILLO TUBO TUERCA SQL> SQL> /* Nombres de todas las piezas que empiezan por 'T' DOC>*/ SQL> SELECT DISTINCT nombPieza FROM Pieza WHERE nombPieza LIKE 'T%'; NOMBPIEZA -------------------------------- TORNILLO TUBO TUERCA SQL> SQL> SQL> /* Piezas que son 'TUERCA' o 'TORNILLO' DOC>*/ SQL> SELECT DISTINCT * FROM Pieza WHERE nombPieza = 'TUERCA' OR nombPieza = 'TORNILLO'; CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 91 TUERCA ROJO 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJO 95 TUERCA AZUL SQL> SQL> /* Piezas que son 'TUERCA' o 'TORNILLO' DOC>*/ SQL> SELECT DISTINCT * 2 FROM Pieza 3 WHERE nombPieza = 'TUERCA' 4 UNION 5 SELECT DISTINCT * 6 FROM Pieza 7 WHERE nombPieza = 'TORNILLO'; CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 91 TUERCA ROJO 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJO 95 TUERCA AZUL SQL> SQL> /* Piezas que son 'TUERCA' o 'TORNILLO' DOC>*/ SQL> SELECT DISTINCT clvPieza "id Pieza", nombPieza nombre, color 2 FROM Pieza 3 WHERE nombPieza IN ('TUERCA', 'TORNILLO'); id Pieza NOMBRE COLOR ---------- -------------------------------- -------------------------------- 91 TUERCA ROJO 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJO 95 TUERCA AZUL SQL> SQL> /* Piezas que son 'TUERCA' o 'TORNILLO' DOC>*/ SQL> SELECT DISTINCT * 2 FROM Pieza 3 WHERE nombPieza =ANY ('TUERCA', 'TORNILLO'); CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 91 TUERCA ROJO 92 TUERCA VERDE 93 TORNILLO AZUL 94 TORNILLO ROJO 95 TUERCA AZUL SQL> SQL> /* Nombre de los proveedores que suministran al menos una pieza de color 'VERDE' DOC>*/ SQL> SELECT DISTINCT nombProv "proveedor", 'suministra piezas de color verde' "función" 2 FROM Proveedor V, Suministrar S, Pieza P 3 WHERE V.clvProv = S.clvProv AND S.clvPieza = P.clvPieza AND P.color = 'VERDE' 4 SQL> /* Nombre de los proveedores que suministran piezas de color 'VERDE' o 'ROJO' DOC>*/ SQL> SELECT DISTINCT nombProv "proveedor", 'suministra piezas de color verde' "función" 2 FROM Proveedor V, Suministrar S, Pieza P 3 WHERE V.clvProv = S.clvProv AND S.clvPieza = P.clvPieza AND P.color = 'VERDE' 4 UNION 5 SELECT DISTINCT nombProv "proveedor", 'suministra piezas de color rojo' "función" 6 FROM Proveedor V, Suministrar S, Pieza P 7 WHERE V.clvProv = S.clvProv AND S.clvPieza = P.clvPieza AND P.color = 'ROJO'; proveedor función -------------------------------- -------------------------------- LOPEZ suministra piezas de color rojo LOPEZ suministra piezas de color verde PEREZ suministra piezas de color rojo PEREZ suministra piezas de color verde SQL> SQL> /* Piezas de las que no se conoce el color DOC>*/ SQL> SELECT * FROM Pieza WHERE color IS NULL; CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 96 PALANCA SQL> SQL> /* Piezas disponibles en varios colores DOC>*/ SQL> SELECT DISTINCT P1.clvPieza, P1.nombPieza, P1.color 2 FROM Pieza P1, Pieza P2 3 WHERE P1.nombPieza = P2.nombPieza AND P1.color <> P2. color; CLVPIEZA NOMBPIEZA COLOR ---------- -------------------------------- -------------------------------- 93 TORNILLO AZUL 94 TORNILLO ROJO 91 TUERCA ROJO 92 TUERCA VERDE 95 TUERCA AZUL SQL> SQL> /* Proveedores que suministran 'TUERCAS' y 'TORNILLOS' DOC>*/ SQL> SELECT DISTINCT S1.clvProv 2 FROM Suministrar S1, Pieza P1, Suministrar S2, Pieza P2 3 WHERE S1.clvPieza = P1.clvPieza AND P1.nombPieza = 'TUERCA' 4 AND S2.clvPieza = P2.clvPieza AND P2.nombPieza = 'TORNILLO' 5 AND S1.clvProv = S2. clvProv; CLVPROV ---------- 2 SQL> SQL> /* Proveedores que suministran 'TUERCAS' y 'TORNILLOS' DOC>*/ SQL> SELECT DISTINCT clvProv 2 FROM Suministrar S, Pieza P 3 WHERE S.clvPieza = P.clvPieza AND P.nombPieza = 'TUERCA' 4 INTERSECT 5 SELECT DISTINCT clvProv 6 FROM Suministrar S, Pieza P 7 WHERE S.clvPieza = P.clvPieza AND P.nombPieza = 'TORNILLO'; CLVPROV ---------- 2 SQL> SQL> /* Clave y nombre de los proveedores que no suministran piezas DOC>*/ SQL> CREATE VIEW noSuministran AS 2 SELECT clvProv FROM Proveedor 3 MINUS 4 SELECT clvProv FROM Suministrar; View created. SQL> SQL> SELECT * 2 FROM Proveedor V, noSuministran N 3 WHERE V.clvProv = N.clvProv; CLVPROV NOMBPROV CLVPROV ---------- -------------------------------- ---------- 3 MARTINEZ 3 SQL> SQL> DROP VIEW noSuministran; View dropped. SQL> SQL> /* Clave y nombre de los proveedores que no suministran piezas DOC>*/ SQL> SELECT * 2 FROM Proveedor 3 WHERE clvProv NOT IN (SELECT clvProv FROM Suministrar); CLVPROV NOMBPROV ---------- -------------------------------- 3 MARTINEZ SQL> SQL> /* Clave y nombre de los proveedores que no suministran piezas DOC>*/ SQL> SELECT * 2 FROM Proveedor V 3 WHERE NOT EXISTS (SELECT * FROM Suministrar WHERE clvProv = V.clvProv); CLVPROV NOMBPROV ---------- -------------------------------- 3 MARTINEZ SQL> SQL> /* Clave y nombre de los proveedores que no suministran tuercas verdes DOC>*/ SQL> SELECT * 2 FROM Proveedor V 3 WHERE NOT EXISTS (SELECT * FROM Pieza P 4 WHERE (nombPieza,color) IN (('TUERCA', 'VERDE')) 5 AND EXISTS(SELECT * FROM Suministrar 6 WHERE clvProv = V.clvProv AND clvPieza = P.clvPieza) 7 ); CLVPROV NOMBPROV ---------- -------------------------------- 3 MARTINEZ SQL> SQL> /* Clave y nombre de los proveedores que no suministran tuercas verdes DOC>*/ SQL> SELECT * 2 FROM Proveedor V 3 WHERE clvProv IN (SELECT clvProv FROM Proveedor 4 MINUS 5 SELECT clvProv FROM Suministrar S, Pieza P 6 WHERE S.clvPieza = P.clvPieza 7 AND P.nombPieza = 'TUERCA' AND P.color = 'VERDE'); CLVPROV NOMBPROV ---------- -------------------------------- 3 MARTINEZ SQL> SQL> SQL> /* Clave y nombre de los proveedores que suministran tuercas de todos los tipos DOC>*/ SQL> SELECT * 2 FROM Proveedor V 3 WHERE NOT EXISTS (SELECT * FROM Pieza P 4 WHERE P.nombPieza = 'TUERCA' 5 AND NOT EXISTS (SELECT * FROM Suministrar 6 WHERE clvProv = V.clvProv AND clvPieza = P.clvPieza) ); CLVPROV NOMBPROV ---------- -------------------------------- 1 PEREZ SQL> SQL> SQL> /* Clave y nombre de los proveedores que suministran tuercas de todos los tipos DOC>*/ SQL> CREATE VIEW NoSumTuercas AS 2 SELECT clvProv, Pieza.clvPieza 3 FROM Proveedor, Pieza 4 WHERE nombPieza = 'TUERCA' 5 MINUS 6 SELECT clvProv, P.clvPieza 7 FROM Suministrar S, Pieza P 8 WHERE S.clvPieza = P.clvPieza AND P.nombPieza = 'TUERCA'; View created. SQL> SQL> SELECT clvProv, nombProv FROM Proveedor 2 MINUS 3 SELECT P.clvProv, nombProv FROM Proveedor P, NoSumTuercas N WHERE P.clvProv = N.clvProv; CLVPROV NOMBPROV ---------- -------------------------------- 1 PEREZ SQL> SQL> DROP VIEW NoSumTuercas; View dropped. SQL> SQL> SQL> /* Clave y nombre de los proveedores, ordenados por nombre DOC>*/ SQL> SELECT clvProv, nombProv FROM Proveedor ORDER BY nombProv; CLVPROV NOMBPROV ---------- -------------------------------- 2 LOPEZ 3 MARTINEZ 1 PEREZ SQL> SQL> /* Clave y nombre de los proveedores, por orden inverso de nombre DOC>*/ SQL> SELECT * FROM Proveedor ORDER BY 2 DESC; CLVPROV NOMBPROV ---------- -------------------------------- 1 PEREZ 3 MARTINEZ 2 LOPEZ SQL> SQL> /* total de piezas existentes DOC>*/ SQL> SELECT count(DISTINCT clvPieza) "tot. Piezas" FROM Pieza; tot. Piezas ----------- 7 SQL> SQL> /* total de piezas distintas existentes DOC>*/ SQL> SELECT count(DISTINCT nombPieza) "tipos de Piezas" FROM Pieza; tipos de Piezas --------------- 4 SQL> SQL> /* total de proveedores DOC>*/ SQL> SELECT count(*) "tot. proveedores" FROM Proveedor; tot. proveedores ---------------- 3 SQL> SQL> /* mayor valor de clvPieza DOC>*/ SQL> SELECT max(clvPieza) "max. clvPieza" FROM Pieza; max. clvPieza ------------- 97 SQL> SQL> /* clave y nombre de las piezas, y el último dígito de la clave DOC>*/ SQL> SELECT clvPieza, MOD(clvPieza, 10) "term.", nombPieza "nombre" 2 FROM Pieza; CLVPIEZA term. nombre ---------- ---------- -------------------------------- 91 1 TUERCA 92 2 TUERCA 93 3 TORNILLO 94 4 TORNILLO 95 5 TUERCA 96 6 PALANCA 97 7 TUBO 7 rows selected. SQL> SQL> /* clave y nombre de las piezas con clave impar, y el último dígito de la clave DOC>*/ SQL> SELECT clvPieza, MOD(clvPieza, 10) "term.", nombPieza "nombre" 2 FROM Pieza 3 WHERE MOD(clvPieza,2) = 1; CLVPIEZA term. nombre ---------- ---------- -------------------------------- 91 1 TUERCA 93 3 TORNILLO 95 5 TUERCA 97 7 TUBO SQL> SQL> /* nombres de las piezas, y cantidad de cada tipo DOC>*/ SQL> SELECT nombPieza "tipo", count(clvPieza) "total" 2 FROM Pieza 3 GROUP BY nombPieza; tipo total -------------------------------- ---------- PALANCA 1 TORNILLO 2 TUBO 1 TUERCA 3 SQL> SQL> /* mostrar los valores NULL como 'desconocido' (SQLPLUS) DOC>*/ SQL> SET NULL desconocido SQL> SQL> /* colores de las piezas y número de piezas de cada color DOC>*/ SQL> SELECT color, count(*) "total", count(color) "colores" 2 FROM Pieza 3 GROUP BY color; COLOR total colores -------------------------------- ---------- ---------- AZUL 2 2 GRIS 1 1 ROJO 2 2 VERDE 1 1 desconocido 1 0 SQL> SQL> /* número medio de piezas de cada color (incluyendo desconocidos) DOC>*/ SQL> SELECT AVG(count(*)) "piezas/color (incluso nulo)" 2 FROM Pieza 3 GROUP BY color; piezas/color (incluso nulo) --------------------------- 1.4 SQL> SQL> /* número medio de piezas de cada color (sólo los conocidos) DOC>*/ SQL> SELECT AVG(count(color)) "piezas/color (conocido)" 2 FROM Pieza 3 GROUP BY color 4 HAVING color IS NOT NULL; piezas/color (conocido) ----------------------- 1.5 SQL> SQL> /* nombre (y cantidad) de los tipos de piezas de las que hay mas de 1, DOC> ordenadas por nombre DOC>*/ SQL> SELECT nombPieza "tipo", count(clvPieza) "total" 2 FROM Pieza 3 GROUP BY nombPieza 4 HAVING count(clvPieza) > 1 5 ORDER BY nombPieza ASC; tipo total -------------------------------- ---------- TORNILLO 2 TUERCA 3 SQL> SQL> SQL> /* Colores de las piezas y número de piezas de cada color, pero sólo de DOC> los colores con menos piezas que la media, ordenados alfabeticamente DOC>*/ SQL> SELECT color, COUNT(*) "total" FROM Pieza 2 GROUP BY color 3 HAVING count(*) < (SELECT AVG(count(*)) FROM Pieza GROUP BY color) 4 ORDER BY color ; COLOR total -------------------------------- ---------- GRIS 1 VERDE 1 desconocido 1 SQL> SQL> /* mostrar los valores NULL como '' (SQLPLUS) DOC>*/ SQL> SET NULL '' SQL> SQL> /* especificar los formatos de algunas columnas (SQLPLUS) DOC>*/ SQL> column nombre format a20; SQL> column Pieza format a16; SQL> column color format a12; SQL> SQL> /* indicar que si no cabe en la columna, trunque el valor (SQLPLUS) DOC>*/ SQL> SET WRAP OFF SQL> SQL> /* clave y nombre de los proveedores, junto con las piezas que suministran DOC>*/ SQL> SELECT V.clvProv "id.", nombProv "nombre", P.clvPieza "ref.", nombPieza "Pieza", color 2 FROM Proveedor V, Suministrar S, Pieza P 3 WHERE V.clvProv = S.clvProv (+) AND S.clvPieza = P.clvPieza (+); id. nombre ref. Pieza COLOR ---------- -------------------- ---------- ---------------- ------------ 1 PEREZ 91 TUERCA ROJO 1 PEREZ 92 TUERCA VERDE 1 PEREZ 95 TUERCA AZUL 2 LOPEZ 92 TUERCA VERDE 2 LOPEZ 93 TORNILLO AZUL 2 LOPEZ 94 TORNILLO ROJO 3 MARTINEZ 7 rows selected. SQL> SQL> /* especificar los formatos de las columnas (SQLPLUS) DOC>*/ SQL> column nombPieza heading "Pieza" format a16; SQL> column nombProv heading "Vendedor" format a16; SQL> column clvProv heading "ID" format 999; SQL> column clvPieza heading "ref." format 999; SQL> SQL> /* clave y nombre de los proveedores, junto con las piezas que suministran DOC>*/ SQL> SELECT V.clvProv, nombProv, P.clvPieza, nombPieza, color 2 FROM Proveedor V, Suministrar S, Pieza P 3 WHERE V.clvProv = S.clvProv AND S.clvPieza = P.clvPieza 4 UNION 5 SELECT clvProv, nombProv, TO_NUMBER(NULL), NULL, NULL 6 FROM Proveedor 7 WHERE clvProv NOT IN (SELECT clvProv FROM Suministrar); ID Vendedor ref. Pieza COLOR ---- ---------------- ---- ---------------- ------------ 1 PEREZ 91 TUERCA ROJO 1 PEREZ 92 TUERCA VERDE 1 PEREZ 95 TUERCA AZUL 2 LOPEZ 92 TUERCA VERDE 2 LOPEZ 93 TORNILLO AZUL 2 LOPEZ 94 TORNILLO ROJO 3 MARTINEZ 7 rows selected. SQL> SQL> /* añadir las piezas: “tuerca amarilla”, de clave 99, y “martillo”, de clave 98 DOC>*/ SQL> INSERT INTO Pieza VALUES (99, 'TUERCA', 'AMARILLO'); 1 row created. SQL> INSERT INTO Pieza VALUES (98, 'MARTILLO', ''); 1 row created. SQL> SQL> /* añadir como piezas la lista de proveedores (aunque no tenga sentido) DOC>*/ SQL> INSERT INTO Pieza SELECT clvprov, nombprov, TO_CHAR(NULL) FROM Proveedor; 3 rows created. SQL> SQL> /* eliminar todas las tuercas DOC>*/ SQL> DELETE FROM Pieza WHERE nombPieza = 'TUERCA'; DELETE FROM Pieza WHERE nombPieza = 'TUERCA' * ERROR at line 1: ORA-02292: integrity constraint (SANTIAGO.SYS_C009386) violated - child record found SQL> SQL> /* eliminar todos los suministros de piezas DOC>*/ SQL> DELETE FROM Suministrar; 6 rows deleted. SQL> SQL> /* eliminar todas los tipos de piezas de las que hay 1 o menos DOC>*/ SQL> DELETE FROM Pieza P 2 WHERE 2 > (SELECT count(*) FROM Pieza WHERE nombPieza = P.nombPieza); 6 rows deleted. SQL> SQL> /* cambiar el color rojo por rojizo DOC>*/ SQL> UPDATE Pieza SET color = 'ROJIZO' WHERE color = 'ROJO'; 2 rows updated. SQL> SQL> /* poner a la pieza 91 el color de la pieza 95 DOC>*/ SQL> UPDATE Pieza SET color = (SELECT color FROM Pieza WHERE clvPieza=95) 2 WHERE clvPieza=91; 1 row updated. SQL> SQL> /* asignar 'desconocido' al color de las piezas con color no existente DOC>*/ SQL> UPDATE Pieza SET color = 'desconocido' WHERE color IS NULL; 0 rows updated. SQL> @elimDatBD_Piezas SQL> /* @elimDatBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar los datos de las tablas DOC>*/ SQL> SQL> DELETE FROM suministrar; 0 rows deleted. SQL> SQL> DELETE FROM Pieza; 6 rows deleted. SQL> SQL> DELETE FROM Proveedor; 3 rows deleted. SQL> SQL> /* mostrar los datos de las tablas y vista DOC>*/ SQL> @verDatBD_Piezas.sql SQL> /* @verDatBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar los datos de las tablas y vista DOC>*/ SQL> SELECT * FROM Pieza; no rows selected SQL> SQL> SELECT * FROM Proveedor; no rows selected SQL> SQL> SELECT * FROM suministrar; no rows selected SQL> SQL> SELECT * FROM infoSuministros; no rows selected SQL> @elimBD_Piezas SQL> /* @elimBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* eliminar las tablas y vistas creadas, en el orden DOC> adecuado, para no violarlas restricciones DOC>*/ SQL> SQL> DROP VIEW infoSuministros; View dropped. SQL> SQL> DROP TABLE suministrar; Table dropped. SQL> SQL> DROP TABLE Pieza; Table dropped. SQL> SQL> DROP TABLE Proveedor; Table dropped. SQL> SQL> /* mostrar la información básica de las tablas y vistas DOC>*/ SQL> @infoBD_Piezas.sql SQL> /* @infoBD_Piezas.sql */ SQL> SET ECHO ON SQL> SQL> /* mostrar la información básica de las tablas y vistas DOC>*/ SQL> SELECT * FROM CAT; no rows selected SQL> SQL> DESCRIBE Proveedor; ERROR: ORA-04043: object Proveedor does not exist SQL> DESCRIBE Pieza; ERROR: ORA-04043: object Pieza does not exist SQL> DESCRIBE suministrar; ERROR: ORA-04043: object suministrar does not exist SQL> DESCRIBE infoSuministros; ERROR: ORA-04043: object infoSuministros does not exist SQL> SQL> spool off