Introduction to Oracle: SQL and PL/SQL, Instructor Guide, Volumen 1

Práctica 15: Taller de SQL --------------------------------------------------------------------

Ejercicio 1: Cree las tablas basadas en los diagramas de instancia de tablas siguient es. Elija los tipos de datos apropiados y asegúrese de agregar las restricciones de integridad. Ejercicio 1.a Nombre de la tabla: MEMBER

Diagrama de Instancia de la Tabla MEMBER ---------------------------------------ME NN VALOR_PREDEFINIDO: FECHA DEL SISTEMA TIPO_DE_DATO: NUMBER VARCHAR2 VARCHAR2 VARCHAR2 DATE TAMAÑO: 10 100 30 15 SQL> , FIRST_NAME , ADDRESS CITY PHONE JOIN_DATE , CONSTRAINT KEY( MEMBER_ID ) ); SQL> save p15_1_a.sql MEMBER_MEMBER_ID_PK PRIMARY VARCHAR2( 100 ), VARCHAR2( 30 ), VARCHAR2( 15 ), DATE DEFAULT SYSDATE VARCHAR2( 25 ) NOT NULL VARCHAR2 25 VARCHAR2 25 ADDRESS NOMBRE_COLUMNA: CITY TIPO_DE_CLAVE: NULL/UNIQUE: MEMBER_ID PHONE PK NN, U LAST_NAME JOIN_DATE NN FIRST_NA

CREATE TABLE MEMBER ( MEMBER_ID NUMBER( 10 ), LAST_NAME VARCHAR2( 25 )

NOT NULL

NOT NULL

Nota: Al definir la Restricción de Clave Primaria sobre la columna MEMBER_ID, no hace falta volver a definir la otra restricción de clave única. Ejercicio 1.b: Nombre de la tabla: TITLE

Diagrama de Instancia de la Tabla TITLE ---------------------------------------ION RATING NOMBRE_COLUMNA: CATEGORY TIPO_DE_CLAVE: NULL/UNIQUE: TITLE_ID RELEASE_DATE PK NN, U TITLE NN DESCRIPT NN

G, PG, R, NC17, NR ACTION, CHILD, SCIFI, DOCUMENTARY VARCHAR2 4

CHECK: DRAMA, COMEDY,

TIPO_DE_DATO: VARCHAR2 TAMAÑO: 20 SQL>

NUMBER DATE 10

VARCHAR2 60 ( NUMBER( 10 ) VARCHAR2( 60 ) VARCHAR2( 400 ) VARCHAR2( 4 ), VARCHAR2( 20 ), DATE, TITLE_TITLE_ID_PK

VARCHAR2 400

CREATE TABLE TITLE TITLE_ID TITLE

NOT NULL NOT NULL NOT NULL

, , DESCRIPTION , RATING CATEGORY RELEASE_DATE CONSTRAINT KEY( TITLE_ID ), CONSTRAINT TITLE_RATING_CK CHECK( R IN ('G', 'PG', 'R', 'NC17', 'NR' ) ), CONSTRAINT TITLE_CATEGORY_CK CHECK( C ATEGORY IN ('DRAMA', 'COMEDY', 'ACTION', 'CHILD', 'SCIFI', 'DOCUMENTARY') ) ); ATING SQL> save p15_1_b.sql

PRIMARY

Ejerci cio 1.c: Nombre de la tabla:

TITLE_COPY

Diagrama de Instancia de la Tabla TITLE_COPY -------------------------------------------NOMBRE_COLUMNA: STATUS TIPO_DE_CLAVE: NULL/UNIQUE: NN CHECK: AVAILABLE, DESTROYED, RENTED, RESERVED FK_TABLA_REFERENCIADA: FK_COLUMNA_REFERENCIADA: TIPO_DE_DATO: VARCHAR2 NUMBER TITLE TITLE_ID NUMBER PK NN, U PK, FK NN, U COPY_ID TITLE_ID

TAMAÑO: 15 SQL>

10

10

CREATE TABLE TITLE_COPY ( COPY_ID NUMBER( 10 ) NOT NULL, TITLE_ID NUMBER( 10 ) NOT NULL CONSTRAINT TITLE_COPY_TITLE_ID_FK REFERENCES TITLE( TITLE_ID ), STATUS VARCHAR2( 15 ) NOT NULL, CONSTRAINT TITLE_COPY_COPY_ID_TITLE_ID_PK PRIMARY KEY ( COPY_ID, TITLE_ID ), CONSTRAINT TITLE_COPY_STATUS_CK CHECK( STATUS IN ('AVAILABLE', 'DESTROYED', 'RENTED', 'RESERVED') ) ); SQL> save p15_1_c.sql

Ejercicio 1.d: Nombre de la tabla:

RENTAL

Diagrama de Instancia de la Tabla RENTAL -------------------------------------------D PK, FK2 VALOR_PREDEFINIDO: Fecha de Sistema + 2 días FK_TABLA_REFERENCIADA: TITLE_COPY FK_COLUMNA_REFERENCIADA: D COPY_ID TIPO_DE_DATO: NUMBER DATE DATE TAMAÑO: 10 SQL> CREATE TABLE RENTAL ( BOOK_DATE MEMBER_ID COPY_ID ACT_RET_DATE EXP_RET_DATE Fecha de Sistema MEMBER TITLE_COPY MEMBER_I TITLE_ID NUMBER NUMBER 10 10 COPY_ID NOMBRE_COLUMNA: ACT_RET_DATE TIPO_DE_CLAVE: BOOK_DATE EXP_RET_DATE PK PK, FK2 MEMBER_I TITLE_ID PK, FK1

DATE

DATE NUMBER( 10 ), NUMBER( 10 ), DATE, DATE

DEFAULT SYSDATE,

DEFAULT (SYSDATE

+ 2), TITLE_ID NUMBER( 10 ), CONSTRAINT RENTAL_BD_MI_CI_TI_PK PRIMARY KEY( BOOK_DATE, MEMBER_ID, COPY_ID, TITLE_ID ), CONSTRAINT RENTAL_MEMBER_ID_FK_1 FOREIGN KEY( MEMBER_ID ) REFERENCES MEMBER ( MEMBER_ID ), CONSTRAINT RENTAL_COPY_ID_TITLE_ID_FK_2 FOREIGN KEY( COPY_ID, TITLE_ID ) REFERENCES TITLE_COPY( COPY_ID, TITLE_ID ) ); SQL> save p15_1_d.sql ________________________________

<<<[ NOTA: FALTAN HOJAS 15-5 y 15-6 ]>>> ---------------------------------Ejercicio 4: ...Falta texto...

Ejercicio 4.a: Inserte datos en la Tabla TITLE, de acuerdo a la siguiente tabla . Use una Secuencia para la columna TITLE_ID. DATOS DE LA TABLA TITLE: -----------------------CATEGORY -------CHILD TITLE RELEASE_DATE ---------------Willie and 05-OCT-1995 Christmas Too DESCRIPTION ----------Todos los Amigos de Willie hacen una lista de navidad para Papa Noel, pero Willie todavía no ha añadido su deseo en la lista. Otra instalación de historia de Ciencia Ficción. La heroína puede salvar al planeta de la amenaza de la forma de vida extraterrestre. SCIFI The Glob 12-AUG-1995 Un meteoro cae cerca de un pequeño pueblo Americano y libera basura cósmica carnívora en este clásico. COMEDY My Day Off 12-JUL-1995 Con un poco de suerte y mucha ingenuidad, un adolescente falta a clases por un día en Nueva York. DRAMA Miracles 12-SEP-1995 On Ices Una niña de 6 años tiene dudas PG acerca de la existencia de Papa Noel, pero descubre que el milagro realmente existe. Después de descubrir una cantidad de drogas, un joven se encuentra enganchado y adicto y se vuelve un ganster mafioso. SQL> CREATE SEQUENCE INCREMENT BY START WITH INSERT INTO VALUES ( TITLE TITLE_TITLE_ID_SEQ 1 1; NR ACTION PG NR R RATING -----G

SCIFI

Alien Again 19-MAY-1995

Soda Gang 01-JUN-1995

SQL>

TITLE_TITLE_ID_SEQ.NEXTVAL, 'Willie and Christmas Too', 'Todos los Amigos de Willie hacen una li sta de navidad para Papa Noel, pero Willie todavía no ha añadido su deseo en la list a.', 'G', 'CHILD', '05-OCT-1995' ); SQL> SQL> save p15_4_a_1.sql INSERT INTO VALUES ( TITLE

TITLE_TITLE_ID_SEQ.NEXTVAL, 'Alien Again', 'Otra instalación de historia de Ciencia F icción. La heroína puede salvar al planeta de la amenaza de la forma de vida extrate rrestre.', 'R', 'SCIFI', '19-MAY-1995' ); SQL> SQL> save p15_4_a_2.sql INSERT INTO VALUES ( TITLE

TITLE_TITLE_ID_SEQ.NEXTVAL, 'The Glob', 'Un meteoro cae cerca de un pequeño pueblo Americano y libera basura cósmica carnívora en este clásico.', 'NR', 'SCIFI', '12-AGO-1995' ); SQL> SQL> save p15_4_a_3.sql TITLE

INSERT INTO VALUES (

TITLE_TITLE_ID_SEQ.NEXTVAL, 'My Day Off', 'Con un poco de suerte y mucha ingenuida d, un adolescente falta a clases por un día en Nueva York.', 'PG', 'COMEDY', '12-JUL-1995' ); SQL> SQL> save p15_4_a_4.sql INSERT INTO VALUES ( TITLE

TITLE_TITLE_ID_SEQ.NEXTVAL, 'Miracles on Ice', 'Una niña de 6 años tiene dudas acerca de la existencia de Papa Noel, pero descubre que el milagro realmente existe.', 'PG', 'DRAMA',

'12-SEP-1995' ); SQL> SQL> save p15_4_a_5.sql TITLE

INSERT INTO VALUES (

TITLE_TITLE_ID_SEQ.NEXTVAL, 'Soda Gang', 'Después de descubrir una cantidad de drog as, un joven se encuentra enganchado y adicto y se vuelve un ganster mafioso.', 'NR', 'ACTION', '01-JUN-1995' ); SQL> save p15_4_a_6.sql

Ejercicio 4.b: Agregue los datos a la tabla MEMBER. Escriba un archivo de coman dos (Script) nombrándolo p15q4b.sql para solicitarle en pantalla, la información al usuario. Ejecute el archivo de comandos. Asegúrese de usar una secuencia para añadir los números de miembros. LAST_NAME FIRST_NAME JOINT_DATE ------------------------------Velasquez Carmen 206-899-6666 08-MAR-1990 Ngao LaDoris va 586-355-8882 08-MAR-1990 Nagayama Midori o 254-852-5764 17-JUN-1991 Quick-to-See Mark 63-559-7777 07-ABR-1990 Ropeburn Audry g 41-559-87 18-ENE-1991 Urguhart Molly 418-542-9988 18-ENE-1991 PHONE SQL> CREATE SEQUENCE INCREMENT BY START WITH edit p15q4b.sql ADDRESS ------283 King Street 5 Mondrany 68 Via Centrale 6921 King Way 86 Chu Street 3035 Laurier CITY ---Seatle Bratisla Sao Paol Lagos Hong Kon Quebec

MEMBER_MEMBER_ID_SEQ 1 1;

SQL>

Contenido del Archivo de comandos: p15q4b.sql --------------------------------------------" ACCEPT last_name PROMPT 'Ingrese el Apellido: ' ACCEPT first_name PROMPT 'Ingrese el Nombre: ' ACCEPT address PROMPT 'Ingrese el domicilio: ' ACCEPT city PROMPT 'Ingrese la ciudad: ' ACCEPT phone PROMPT 'Ingrese el número de teléfono: ' ACCEPT joint_date PROMPT 'Ingrese la fecha de ingreso: ' INSERT INTO MEMBER VALUES ( MEMBER_MEMBER_ID_SEQ.NEXTVAL, '&last_name',

'&first_name', '&address', '&city', '&phone', '&joint_date' ); " SQL> SQL> SQL> SQL> SQL> SQL> start start start start start start p15q4b.sql p15q4b.sql p15q4b.sql p15q4b.sql p15q4b.sql p15q4b.sql

Ejercicio 4.c: Agregue los datos de las copias de películas en la tabla TITLE_COP Y Nota: Tenga disponible los valores de la columna TITLE_ID de la tabla TITLE para realizar este ejercicio. Datos de la tabla: TITLE_COPY ----------------------------COPY_ID STATUS -----------1 AVAILABLE 1 AVAILABLE 2 RENTED 1 AVAILABLE 1 AVAILABLE 2 AVAILABLE 3 RENTED 1 AVAILABLE 1 AVAILABLE SQL> TITLE_ID -------1 2 4 SELECT FROM TITLE_ID, TITLE TITLE; TITLE ----Willie and Christmas Too Allien Again The Glob Soda Gang 7 Miracles On Ice 6 My Day Off 5 My Day Off 5 My Day Off 5 The Glob 4 Alien Again 2 Alien Again 2 Willie and Christmas Too 1 -----------TITLE ===> TITLE_ID

5 6 7 SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL> SQL>

My Day Off Miracles on Ice Soda Gang INSERT INTO TITLE_COPY VALUES ( 1, 1, 'AVAILABLE' ); save p15q4c_1.sql

INSERT INTO TITLE_COPY VALUES ( 1, 2, 'AVAILABLE' ); save p15q4c_2.sql

INSERT INTO TITLE_COPY VALUES ( 2, 2, 'RENTED' ); save p15q4c_3.sql

INSERT INTO TITLE_COPY VALUES ( 1, 4, 'AVAILABLE' ); save p15q4c_4.sql

INSERT INTO TITLE_COPY VALUES ( 1, 5, 'AVAILABLE' ); save p15q4c_5.sql

INSERT INTO TITLE_COPY VALUES ( 2, 5, 'AVAILABLE' ); save p15q4c_6.sql

INSERT INTO TITLE_COPY VALUES ( 3, 5, 'RENTED' ); save p15q4c_7.sql

INSERT INTO TITLE_COPY VALUES ( 1, 6, 'AVAILABLE'); save p15q4c_8.sql

INSERT INTO TITLE_COPY VALUES ( 1, 7, 'AVAILABLE'); save p15q4c_9.sql

Ejercicio 4.d: Agregue los datos de alquileres siguientes a la tabla RENTAL. Nota: Los números de los títulos y de los miembros pueden ser dife rentes dependiendo de los números de la secuencia. Datos de la tabla RENTAL -----------------------EXP_RET_DATE -----------BOOK_DATE TITLE_ID ---------------MEMBER_ID --------COPY_ID ------ACT_RET_DATE ------------

18-DIC-2010 20-DIC-2010 19-DIC-2010 17-DIC-2010

16-DIC-2010 1 18-DIC-2010 2 17-DIC-2010 5 15-DIC-2010 7 SQL>

1 1 2 6

1 2 3 1

17-DIC-2010

17-DIC-2010

INSERT INTO RENTAL VALUES ('16-DIC-2010', 1, 1, '17-DIC-2010', '18-DIC-201 save p15q4d_1.sql INSERT INTO RENTAL VALUES ('18-DIC-2010', 1, 2,NULL ,'20-DIC-2010', 2); save p15q4d_2.sql INSERT INTO RENTAL VALUES ('17-DIC-2010', 2, 3, NULL, '19-DIC-2010', 5); save p15q4d_3.sql INSERT INTO RENTAL VALUES ('15-DIC-2010', 6, 1, '17-DIC-2010', '17-DIC-201 save p15q4d_4.sql llamada TITLE_AVAIL para mostrar los títulos de las de cada copia y su día de retorno esperado si es qu los registros/filas desde la vista. Ordene el res TITLE.

0', 1); SQL> SQL> SQL> SQL> SQL> SQL> 0', 7); SQL>

Ejercicio 5: Cree una vista películas y la disponibilidad e fue rentada. Consulte todos ultado de la consulta por la columna SQL> T_DATE

CREATE VIEW TITLE_AVAIL AS SELECT t.TITLE, tc.COPY_ID, tc.STATUS, r.EXP_RE FROM WHERE AND TITLE t, TITLE_COPY tc, RENTAL r t.TITLE_ID = tc.TITLE_ID tc.COPY_ID = r.COPY_ID ; * TITLE_AVAIL TITLE_AVAIL.TITLE;

SQL>

SELECT FROM ORDER BY

SQL> T_DATE

CREATE OR REPLACE VIEW TITLE_AVAIL AS SELECT t.TITLE, tc.COPY_ID, tc.STATUS, r.EXP_RE FROM WHERE AND AND TITLE t, TITLE_COPY tc, RENTAL r t.TITLE_ID = tc.TITLE_ID tc.COPY_ID = r.COPY_ID(+) tc.TITLE_ID = r.TITLE_ID(+) ; * TITLE_AVAIL

SQL>

SELECT FROM

ORDER BY TITLE, COPY_ID; ________________________________ <<<[Nota: Se abandona la Práctica 15]>>> __________________________________ <<<[Causa: Hojas faltantes 15-5 y 15-6]>>> ------------------------------------

Sign up to vote on this title
UsefulNot useful