Вы находитесь на странице: 1из 4

Universidad Nacional de Asuncin Facultad Politcnica

Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 4 Sentencias DML

Seccin

ABIQ-Cnel.Ov.

1. Inserte una nueva rea denominada Auditora con el ID igual al ltimo ms 1, que depender del
ID perteneciente a la Gerencia Administrativa.
INSERT INTO B_AREAS
(ID, NOMBRE_AREA, FECHA_CREA, ACTIVA, ID_AREA_SUPERIOR)
SELECT (SELECT MAX(ID)+1 FROM B_AREAS), 'Auditoria', SYSDATE, 'S',
ID FROM B_AREAS WHERE UPPER(NOMBRE_AREA) = 'GERENCIA ADMINISTRATIVA';

2. Inserte el nuevo empleado con los siguientes datos:


CEDULA

NOMBRE

APELLIDO

FECHA_ING

FECHA_NACIM

CEDULA_JEFE

TELEFONO

123566

MARCIO

BALMACEDA

SYSDATE

04/02/1970

La cdula de
Jos Caniza

El mismo telfono, direccin y barrio


de su hermano Jose Balmaceda

DIRECCION

BARRIO

INSERT INTO B_EMPLEADOS


SELECT 123566, 'Marcio', 'Balmaceda', SYSDATE,
TO_DATE('04021970','DDMMYYYY') FECHA_NAC,
(SELECT CEDULA FROM B_EMPLEADOS WHERE UPPER(NOMBRE) LIKE 'JOSE'
AND UPPER(APELLIDO) LIKE 'CANIZA%') JEFE,
TELEFONO, DIRECCION, BARRIO
FROM B_EMPLEADOS
WHERE UPPER(NOMBRE) LIKE 'JOSE%'
AND UPPER(APELLIDO) LIKE 'BALMACEDA%';

3. Salga del plus sin efectuar el commit. Ingrese de vuelta. Verifique las filas. Explique lo que sucedi
(al salir se efecta el commit)

4.

El Seor Ricardo Meza pasa a tener la misma posicin y rea que la Seora Amanda Prez. Realice
el cambio en 2 sentencias:
ACTUALICE la fecha de fin a la actual posicin de Ricardo Meza INSERTE una nueva posicin para el seor Ricardo Meza, con la categora y rea de la Seora
Amanda Prez, y fecha de inicio a partir de hoy.
UPDATE
SET
WHERE
FROM
WHERE
AND

b_posicion_actual
fecha_fin = SYSDATE
cedula = (SELECT cedula
b_empleados
UPPER(nombre) LIKE 'RICARDO%'
UPPER(apellido) LIKE 'MEZA%');

INSERT INTO b_posicion_actual


SELECT
(SELECT MAX(ID)+1 FROM B_POSICION_ACTUAL) ID, COD_CATEGORIA,
(SELECT cedula
FROM
b_empleados
WHERE UPPER(nombre) LIKE 'RICARDO%'
AND
UPPER(apellido) LIKE 'MEZA%') CEDULA,
ID_AREA, SYSDATE, NULL
FROM B_POSICION_ACTUAL
WHERE CEDULA = (SELECT cedula
FROM
b_empleados
WHERE UPPER(nombre) LIKE 'AMANDA%';

Pg. 1/4

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 4 Sentencias DML

AND
AND

Seccin

ABIQ-Cnel.Ov.

UPPER(apellido) LIKE 'PEREZ%')


FECHA_FIN IS NULL;

5. Cree la tabla de BONIFICACION (con el script que se proporciona ms abajo) y calcule con una
operacin MERGE, la bonificacin correspondiente a todos los empleados.
En todos los casos, la bonificacin es igual al total de ventas de cada cdula del vendedor, el cual se
calcula sumando el porcentaje de comisin que corresponde a cada artculo sobre el costo de venta de
dicho artculo de las ventas realizadas hasta la fecha.
Cuando el registro de bonificacin ya existe, actualice la bonificacin con el monto calculado
Si no existe, inserte el registro correspondiente.
CREATE TABLE BONIFICACION
(CEDULA_VENDEDOR NUMBER(11),
BONIFICACION NUMBER(10));
MERGE INTO bonificacion B
USING (SELECT CEDULA_VENDEDOR, SUM(D.CANTIDAD * D.PRECIO *
A.PORC_COMISION) BONIFICACION
FROM
B_DETALLE_VENTAS D, B_VENTAS V, B_ARTICULOS A
WHERE V.ID = D.ID_VENTA
AND
A.ID = D.ID_ARTICULO
GROUP BY CEDULA_VENDEDOR) E
ON (B.CEDULA_VENDEDOR = E.CEDULA_VENDEDOR)
WHEN MATCHED THEN
UPDATE SET B.bonificacion = E.BONIFICACION
WHEN NOT MATCHED THEN
INSERT (B.CEDULA_VENDEDOR, B.BONIFICACION)
VALUES (E.CEDULA_VENDEDOR, E.BONIFICACION);

6. Se han rematado todos los artculos que no han tenido ventas ni compras en todo el periodo. Elimine
fsicamente dichos artculos de la BD.
DELETE FROM B_ARTICULOS A
WHERE NOT EXISTS (SELECT 'X' FROM B_DETALLE_VENTAS WHERE ID_ARTICULO =
A.ID)
AND NOT EXISTS (SELECT 'X' FROM B_DETALLE_COMPRAS WHERE ID_ARTICULO =
A.ID);

7. La organizacin ha notado que por un error de proceso, no se ha actualizado el STOCK de los


artculos al efectuar las compras. ACTUALICE el stock de cada artculo sumndole las respectivas
cantidades compradas:
UPDATE b_articulos a
SET
stock_actual = stock_actual + NVL((SELECT
SUM(cantidad)
FROM
b_detalle_compras
WHERE id_articulo = a.id),0);

Pg. 2/4

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 4 Sentencias DML

8.

Seccin

ABIQ-Cnel.Ov.

Inserte en la tabla B_MAYOR de la cuenta 1120200 correspondiente al mes de ENERO de este ao,
a partir de la acumulacin de los datos de los asientos del DIARIO. Tenga en cuente que el id del
mayor es siempre el ltimo nmero +1.
INSERT INTO B_MAYOR
SELECT (SELECT NVL(MAX(ID_MAYOR),0) +1
FROM B_MAYOR) ID,
CODIGO_CTA, ANIO, MES, ACUM_DEBITO, ACUM_CREDITO
FROM
(SELECT D.CODIGO_CTA,
TO_CHAR(C.FECHA,'YYYY') ANIO,
TO_CHAR(C.FECHA,'MM') MES,
SUM(DECODE(D.DEBE_HABER, 'D', D.IMPORTE, 0)) ACUM_DEBITO,
SUM(DECODE(D.DEBE_HABER, 'C', D.IMPORTE, 0)) ACUM_CREDITO
FROM B_DIARIO_DETALLE D JOIN B_DIARIO_CABECERA C
ON
C.ID = D.ID
WHERE D.CODIGO_CTA = 1120200
AND TO_CHAR(C.FECHA,'MM') = '01'
GROUP BY D.CODIGO_CTA, TO_CHAR(C.FECHA,'YYYY'),
TO_CHAR(C.FECHA,'MM')) DIARIO;

9. Una de las posibilidades que ofrece el ORACLE es la de insertar mltiples tablas al mismo tiempo.
Corra los siguientes scripts para crear tablas de VENTAS al contado y crdito.
CREATE TABLE VENTAS_CONTADO2011
(ID_ARTICULO NUMBER(8),
MES
NUMBER(2),
CANTIDAD
NUMBER(6),
TOTAL_VENTA
NUMBER(8));
CREATE TABLE VENTAS_CREDITO2011
(ID_ARTICULO NUMBER(8),
MES
NUMBER(2),
CANTIDAD
NUMBER(6),
TOTAL_VENTA
NUMBER(8));
Aplique INSERT ... WHEN para insertar en una sola sentencia las ventas de ambos tipos a partir las tablas de
VENTAS correspondientes al ao 2011. Atencin: Tipo de venta es CR( crdito) o CO (contado).
INSERT ALL
WHEN (TIPO_VENTA = 'CR') THEN
INTO VENTAS_CREDITO2011
VALUES (ID_ARTICULO, MES, CANTIDAD, TOTAL_VENTA)
WHEN (TIPO_VENTA = 'CO') THEN
INTO VENTAS_CONTADO2011

Pg. 3/4

Universidad Nacional de Asuncin Facultad Politcnica


Carrera:
CIENCIAS INFORMTICAS
Ao
2012
Materia:
BASE DE DATOS II
Semestre
Quinto
EJERCICIO 4 Sentencias DML

Seccin

ABIQ-Cnel.Ov.

VALUES (ID_ARTICULO, MES, CANTIDAD, TOTAL_VENTA)


SELECT D.ID_ARTICULO, V.TIPO_VENTA,
TO_CHAR(V.FECHA, 'MM') MES,
SUM(D.CANTIDAD) CANTIDAD,
SUM(D.CANTIDAD * D.PRECIO) TOTAL_VENTA
FROM B_DETALLE_VENTAS D JOIN B_VENTAS V
ON
V.ID = D.ID_VENTA
GROUP BY D.ID_ARTICULO, V.TIPO_VENTA, TO_CHAR(V.FECHA, 'MM');

10. Borre de la BD las categoras salariales que histricamente no han sido asignadas a ningn
funcionario:
DELETE FROM B_CATEGORIAS_SALARIALES C
WHERE NOT EXISTS
(SELECT 'X' FROM B_POSICION_ACTUAL
WHERE COD_CATEGORIA = C.COD_CATEGORIA);

Pg. 4/4

Вам также может понравиться