Está en la página 1de 5

Programación de Bases de Datos con SQL

academy.oracle.com

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

m
er as
co
1. ¿Cuándo se requiere un valor DEFAULT?

eH w
Cuando no se da ningún valor durante la creación de la fila y quiero que el campo

o.
tome algún valor predefinido.
rs e
ou urc
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
o

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:
aC s
vi y re

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


Fast Foods utilizando la siguiente sentencia SQL:
ed d

CREATE TABLE copy_f_promotional_menus


ar stu

AS (SELECT * FROM f_promotional_menus)

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


is

ALTER TABLE copy_f_promotional_menus


Th

MODIFY(start_date DATE DEFAULT SYSDATE)

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


sh

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-
Jun2005' 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.
This study source was downloaded by 100000809939014 from CourseHero.com on 04-28-2021 18:38:30 GMT -05:00

https://www.coursehero.com/file/63862695/DP-12-3-Practice-esppdf/
La opción A
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

m
er as
TRUNC(SYSDATE));

co
eH w
o.
Opción C

rs e
UPDATE copy_f_promotional_menus SET start_date = TRUNC(SYSDATE) WHERE
ou urc
TRUNC(start_date) = TO_DATE('10-Feb-2004','dd-Mon-yyyy');
Para las nuevas filas
o

NSERT INTO copy_f_promotional_menus(code,name,end_date,give_away)


aC s
vi y re

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)


ed d

VALUES('120','New Customer',DEFAULT,TO_DATE('01-Jun-2005','dd-Mon-yyyy'),' 10%


ar stu

discount coupon');
is
Th
sh

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.
This study source was downloaded by 100000809939014 from CourseHero.com on 04-28-2021 18:38:30 GMT -05:00

https://www.coursehero.com/file/63862695/DP-12-3-Practice-esppdf/
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.


La asignación de cd_number se realiza manualmente, no necesito crear una
secuencia para esto. Si se tuviera que crear la secuencia, este punto habría venido
después del punto b a continuación, la tabla original no tiene una secuencia en esta
columna.

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


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

m
DESCRIBE d_cds;

er as
DESCRIBE manager_copy_d_cds;

co
SELECT * FROM d_cds;

eH w
SELECT * FROM manager_copy_d_cds;

o.
rs e
c. Inserte en la tabla manager_copy_d_cds cada nuevo título de CD mediante una
ou urc
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)
o

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


aC s
vi y re

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)


ed d

VALUES(99,'Party Music','Old Town Records','2004');


ar stu

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


VALUES(100,'Best of Rock and Roll','Old Town Records','2004');
is

SELECT * FROM manager_copy_d_cds ;


Th

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
sh

utilizada?
Para verificar la fusión
UPDATE manager_copy_d_cds SET title = 'hkumar' WHERE cd_number = 90;

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.
This study source was downloaded by 100000809939014 from CourseHero.com on 04-28-2021 18:38:30 GMT -05:00

https://www.coursehero.com/file/63862695/DP-12-3-Practice-esppdf/
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.

m
er as
CREATE TABLE sal_history (employee_id, hire_date, salary)

co
AS SELECT employee_id, hire_date, salary

eH w
FROM employees

o.
WHERE 1=2;
rs e
ou urc
CREATE TABLE mgr_history (employee_id, manager_id, salary)
AS SELECT employee_id, manager_id, salary
FROM employees
o

WHERE 1=2;
aC s
vi y re

CREATE TABLE special_sal (employee_id, salary)


AS SELECT employee_id, salary
FROM employees
WHERE 1=2;
ed d
ar stu

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
is

tabla special_sal. Inserte los detalles de employee_id, hire_date y salary en la tabla


Th

sal_history. Inserte employee_id, manager_id y salary en la tabla mgr_history.

Debe aparecer un mensaje que indica que se han insertado 39 filas. Verifique que recibe
sh

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

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.
This study source was downloaded by 100000809939014 from CourseHero.com on 04-28-2021 18:38:30 GMT -05:00

https://www.coursehero.com/file/63862695/DP-12-3-Practice-esppdf/
Utilizando FIRST o ALL no hay diferencia ya que solo hay un WHEN, en el resto hay dos
INSERT.

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.

m
SELECT COUNT(*) FROM special_sal; 1

er as
SELECT COUNT(*) FROM sal_history; 19

co
eH w
SELECT COUNT(*) FROM mgr_history; 19

o.
rs e
ou urc
o
aC s
vi y re
ed d
ar stu
is
Th
sh

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.
This study source was downloaded by 100000809939014 from CourseHero.com on 04-28-2021 18:38:30 GMT -05:00

https://www.coursehero.com/file/63862695/DP-12-3-Practice-esppdf/
Powered by TCPDF (www.tcpdf.org)

También podría gustarte