Está en la página 1de 5

academy.oracle.

com

Programación de Bases de Datos con SQL


12-3 : Valores DEFAULT, MERGE e Inserciones en Varias Tablas
Actividades de Práctica

Objetivos
 Comprender cuándo especificar un valor DEFAULT
 Crear y ejecutar una sentencia MERGE
 Crear y ejecutar sentencias DML utilizando SUBCONSULTAS
 Crear y ejecutar inserciones en varias tablas

Inténtelo/Resuélvalo

1. ¿Cuándo se requiere un valor DEFAULT?


R= cuando no se da ningún valor en la creación de la fila y quiere que este tenga un
valor ya predefinido

2. Actualmente, la columna START_DATE de la tabla F_PROMOTIONAL_MENUS de


Global Fast Foods no tiene SYSDATE definido como DEFAULT. Su jefe ha decidido que
le gustaría poder definir la fecha de inicio de las promociones en el día actual para
algunas entradas. Para ello, es necesario realizar tres pasos:

a. En su esquema, realice una copia de la tabla F_PROMOTIONAL_MENUS de Global


Fast Foods utilizando la siguiente sentencia SQL:

CREATE TABLE copy_f_promotional_menus


AS (SELECT * FROM f_promotional_menus)

b. Modifique los atributos de la columna START_DATE actual mediante:

ALTER TABLE copy_f_promotional_menus


MODIFY(start_date DATE DEFAULT SYSDATE)

c. Utilizando INSERT, inserte la nueva información y realice una comprobación para


verificar los resultados.
Utilizando INSERT, inserte una nueva fila en la tabla copy_f_promotional_menus para
la nueva promoción del jefe. El código de promoción es 120. El nombre de la
promoción es ‘New Customer’. Introduzca DEFAULT para la fecha de inicio y '01-Jun-
2005' para la fecha de finalización. El regalo es un cupón con un 10% de descuento.
¿Cuál es la sintaxis correcta utilizada?

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
opcionA
CREATE TABLE copy_f_promotional_menus AS ( SELECT * FROM f_promotional_menus);
DESCRIBE f_promotional_menus;
DESCRIBE copy_f_promotional_menus;
SELECT * FROM f_promotional_menus;
SELECT * FROM copy_f_promotional_menus;
SELECT TO_CHAR(TRUNC(start_date), 'dd-mm-yyyy-hh24:mi:ss'),TO_CHAR(start_date, 'dd-
mm-yyyy-hh24:mi:ss') FROM copy_f_promotional_menus;
SELECT TO_CHAR(TRUNC(sysdate), 'dd-mm-yyyy-hh24:mi:ss') FROM dual;

Opción B
ALTER TABLE copy_f_promotional_menus MODIFY(start_date DATE DEFAULT
TRUNC(SYSDATE));

Opción C
UPDATE copy_f_promotional_menus SET start_date = TRUNC(SYSDATE) WHERE
TRUNC(start_date) = TO_DATE('10-Feb-2004','dd-Mon-yyyy');
NSERT INTO copy_f_promotional_menus(code,name,end_date,give_away)
VALUES('116','Back to School part 3',NULL,'ballpen and highlighter again2');
INSERT INTO copy_f_promotional_menus(code,name,start_date,end_date,give_away)
VALUES('120','New Customer',DEFAULT,TO_DATE('01-Jun-2005','dd-Mon-yyyy'),' 10%
discount coupon');

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
2

3. Allison Plumb, la jefa de planificación de eventos de DJs on Demand, le acaba de


proporcionar la siguiente lista de CD que adquirió en una compañía que cerraba.
Desea una nueva lista actualizada de los CD en inventario en una hora, pero no desea
que se modifique la tabla D_CDS original. Prepare una lista de inventario actualizada solo
para ella.

a. Asigne nuevos valores cd_number a cada nuevo CD adquirido.

b. Cree una copia de la tabla D_CDS denominada manager_copy_d_cds. ¿Cuál es la


sintaxis correcta utilizada?
R=
CREATE TABLE manager_copy_d_cds AS ( SELECT * FROM d_cds);
DESCRIBE d_cds;
DESCRIBE manager_copy_d_cds;
SELECT * FROM d_cds;
SELECT * FROM manager_copy_d_cds;

c. Inserte en la tabla manager_copy_d_cds cada nuevo título de CD mediante una


sentencia INSERT. Ponga un ejemplo o utilice estos datos:
20, 'Hello World Here I Am', 'Middle Earth Records', '1998'
¿Cuál es la sintaxis correcta utilizada?

INSERT INTO manager_copy_d_cds(cd_number,title,producer,year)


VALUES(20,'Hello World Here I Am','Middle Earth Records','1998');

INSERT INTO manager_copy_d_cds(cd_number,title,producer,year) VALUES(97,'Celebrate


the Day','R & B Inc.','2003');

INSERT INTO manager_copy_d_cds(cd_number,title,producer,year) VALUES(99,'Party


Music','Old Town Records','2004');

INSERT INTO manager_copy_d_cds(cd_number,title,producer,year) VALUES(100,'Best of


Rock and Roll','Old Town Records','2004'); SELECT * FROM manager_copy_d_cds ;

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
3
d. Utilice una sentencia de fusión para agregar a la tabla manager_copy_d_cds los CD
desde la tabla original. Si hay alguna coincidencia, actualice el título y el año.
De lo contrario, inserte los datos desde la tabla original. ¿Cuál es la sintaxis
correcta utilizada?
Para verificar la fusión
UPDATE manager_copy_d_cds SET title = 'hkumar' WHERE cd_number = 90;

Eliminar registro en manager_copy


DELETE FROM manager_copy_d_cds WHERE cd_number = 91;
SELECT * FROM manager_copy_d_cds ;
MERGE INTO manager_copy_d_cds tgt USING d_cds src
ON (src.cd_number = tgt.cd_number)
WHEN MATCHED THEN UPDATE SET tgt.title = src.title, tgt.producer = src.producer, tgt.year
= src.year
WHEN NOT MATCHED THEN INSERT
VALUES (src.cd_number, src.title, src.producer, src.year);

4. Ejecute las 3 sentencias siguientes para crear 3 tablas nuevas y utilizarlas en una
sentencia de inserción en varias tablas. Las 3 tablas deben estar vacías cuando se crean,
lo que explica la condición WHERE 1=2 de la cláusula WHERE.

CREATE TABLE sal_history (employee_id, hire_date, salary)


AS SELECT employee_id, hire_date, salary
FROM employees
WHERE 1=2;

CREATE TABLE mgr_history (employee_id, manager_id, salary)


AS SELECT employee_id, manager_id, salary
FROM employees
WHERE 1=2;

CREATE TABLE special_sal (employee_id, salary)


AS SELECT employee_id, salary
FROM employees
WHERE 1=2;

Una vez que tenga las tablas en su cuenta, escriba una sentencia de inserción en varias
tablas para seleccionar en primer lugar employee_id, hire_date, salary y manager_id de
todos los empleados. Si el salario es superior a 20000, inserte employee_id y salary en la
tabla special_sal. Inserte los detalles de employee_id, hire_date y salary en la tabla
sal_history. Inserte employee_id, manager_id y salary en la tabla mgr_history.

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
4

Debe aparecer un mensaje que indica que se han insertado 39 filas. Verifique que recibe
este mensaje y que tiene el siguiente número de filas en cada tabla:

Sal_history: 19 filas
Mgr_history: 19 filas
Special_sal: 1

INSERT FIRST
WHEN salary > 20000 THEN
INTO special_sal
VALUES(employee_id, salary)
ELSE
INTO sal_history
VALUES(employee_id, hire_date, salary)
INTO mgr_history
VALUES(employee_id, manager_id, salary)
SELECT employee_id, salary, hire_date, manager_id
FROM employees;
39 row(s) inserted.
SELECT COUNT(*) FROM special_sal; 1
SELECT COUNT(*) FROM sal_history; 19
SELECT COUNT(*) FROM mgr_history; 19

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.

También podría gustarte