Está en la página 1de 2

Utilizando el motor de base de datos ORACLE conteste las siguientes preguntas:

1. Desplegar el valor total vendido de un producto dado su Id_fab y su Id_producto. (2 puntos).

SELECT PRODUCTO, SUM(IMPORTE) AS TOTAL_VEN FROM PEDIDOS


WHERE FAB = 'ACI' AND PRODUCTO = '4100Z'
GROUP BY PRODUCTO;
2. Desplegar la información de un estudiante dado su cedula (los datos a desplegar son: Nombres,

Apellidos, numero de materias que ha tomado, número de créditos aprobados y nivel de la última

matricula. (2 puntos).

SELECT ESTUDIANTES.NOMBRES, ESTUDIANTES.APELLIDOS,


COUNT(ID_MATERIA),
SUM(NUMERO_CREDITOS), MAX(PERIODO) FROM
DETALLE, MATERIA, ESTUDIANTES
WHERE DETALLE.CEDULA = '1001788262' GROUP BY ESTUDIANTES.NOMBRES,
ESTUDIANTES.APELLIDOS;
3. Mediante un cursor desplegar los nombres de los clientes que no hayan realizado pedidos. (2 puntos)

CREATE OR REPLACE PROCEDURE CLIENTES_NO_PED


AS
BEGIN
DECLARE CURSOR CLIENTES
IS
--CONSULTA
SELECT EMPRESA
FROM CLIENTES, PEDIDOS
--WHERE CLIENTES.NUM_CLIE = PEDIDOS.CLIE
WHERE CLIENTES.NUM_CLIE NOT IN(SELECT CLIE FROM PEDIDOS)
GROUP BY EMPRESA;
--VARIABLES PARA ALMACENAR LOS DATOS
NOMBRE_EMPR VARCHAR2(50) := ' ';
BEGIN
OPEN CLIENTES;
DBMS_OUTPUT.PUT_LINE ('NOMBRE DEL CLIENTE');
FOR J IN 1..50 LOOP
FETCH CLIENTES INTO NOMBRE_EMPR;
EXIT WHEN CLIENTES%NOTFOUND;
DBMS_OUTPUT.PUT_LINE ('- ' || NOMBRE_EMPR);
END LOOP;
CLOSE CLIENTES;
END;
END;

EXECUTE CLIENTES_NO_PED;

4. Hacer un trigger que controle que un estudiante no se matricule en una materia, si el número de créditos

a tomar sobrepasa de los 30 créditos. (3 puntos)

CREATE OR REPLACE TRIGGER TR_MATRICULA


BEFORE INSERT ON CABECERA_HISTORICO
FOR EACH ROW
DECLARE
PERIODO NUMBER(6,0) := 0;
CREDITOS NUMBER(6,0) := 0;
BEGIN
SELECT MAX(PERIODO) INTO PERIODO FROM DETALLE;
SELECT SUM(NUMERO_CREDITOS) INTO CREDITOS FROM
CABECERA_HISTORICO, DETALLE,
MATERIA WHERE CABECERA_HISTORICO.CUR_CODIGO =
DETALLE.CUR_CODIGO
AND CABECERA_HISTORICO.ID_MATERIA = MATERIA.ID_MATERIA
AND CABECERA_HISTORICO.CEDULA = :NEW.CEDULA
AND DETALLE.PERIODO = PERIODO;
IF (PERIODO >= 30) THEN
RAISE_APPLICATION_ERROR(-20002, 'EL ALUMNO SOBREPASA EL NUMERO
DE CREDITOS ACEPTADOS');
END IF;
END TR_MATRICULA;
5. Hacer un procedimiento almacenado que reciba como parámetro la cedula del estudiante e imprima
los nombres y apellidos de los estudiantes, el número de materias aprobadas, el número de créditos
aprobados y el promedio de notas que tenga. (3 puntos)
6. Crear una función que reciba como parámetro la cedula del estudiante y devuelva el número de

materias aprobadas, el número de materias reprobadas, el número de créditos aprobados, el número de

créditos reprobados. (3 puntos)

Nota: Deberá grabar en un archivo con extensión .sql especificando el número de la pregunta y el archivo

deberá grabar con su nombre y apellido.

También podría gustarte