Ejercicios
Escriba un Trigger que evite que un alumno reciba la calificación de 0 en un examen y solicite al profesor que generosamente la convierta en un 1.
Pruebe el resultado del ejercicio con:
INSERT INTO alumno( id_alumno, documento_alumno, nombre_alumno, apellido_alumno )
VALUES(
3,
'989056789',
'Juan',
'Perez'
);
INSERT INTO examen_alumno(id_examen, id_alumno, fecha,calificacion) VALUES(
1,
3,
'18-Feb-09',
0
);
CREATE OR REPLACE TRIGGER evita_cero
BEFORE INSERT OR UPDATE ON examen_alumno
FOR EACH ROW
BEGIN
IF :new.calificacion < 1 THEN
RAISE_APLICATION_ERROR(-20201, 'La calificación mínima es 1');
END IF;
END;
Ejercicio 3
Escriba un programa PL/SQL que solicite al usuario el documento de un alumno, consulte su información en la base de datosy presente su nombre y apellido junto con la calificación obtenida en el examen cuyo id es 1. En caso de que el documento ingresado no coincida con la información de ningún estudiante debe lanzarse una excepción que informe al usuario de la no existencia de datos para ese documento.
SET SERVEROUTPUT ON;
DECLARE
documento varchar2(20) := '&documento_introducido';
id_examen number := 1;aux_nomb varchar2(50);
aux_apel varchar2(50);
aux_calif number;
BEGIN
SELECT Alumno.NOMBRE_ALUMNO, Alumno.APELLIDO_ALUMNO, Examen_Alumno.CALIFICACION
INTO aux_nom, aux_apel, aux_calif
FROM ALUMNO A JOIN EXAMEN_ALUMNO Examen_Alumno
ON Alumno.ID_ALUMNO = Examen_Alumno.ID_ALUMNO
WHERE Alumno.DOCUMENTO_ALUMNO LIKE documento;
DBMS_OUTPUT.PUT_LINE('Información Alumno: '||aux_nomb||' '||aux_apel||' '||aux_calif);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No existe datos para el documento: '||
documento);
END;
¿Qué ocurre al ejecutar el siguiente código?:
SET SERVEROUTPUT ON;
DECLARE
v_var1 NUMBER(2) := 123;
v_var2 NUMBER(3) := 123;
v_var3 NUMBER(5,3) := 123456.123;
BEGIN
DBMS_OUTPUT.PUT_LINE('v_var1: '||v_var1);
DBMS_OUTPUT.PUT_LINE('v_var2: '||v_var2);DBMS_OUTPUT.PUT_LINE('v_var3: '||v_var3);
END;
Que en la declaración de las variables v_var1 y v_var3 se especifican tamaños menores a los valores asignados al inicializarlas, saltando un mensaje de error cuando es compilado.
Ejercicio 4
Para realizar los siguientes ejercicios es necesario ingresar los siguientes datos en las tablas correspondientes:
Escriba un programa en PL/SQLque permita – basado en las calificaciones obtenidas en los exámenes 1 y 2 – determinar si un alumno se encuentra aprobando el curso (calificación promedio mayor o igual a 3) o si por el contrario corre riesgo de reprobarlo (calificación promedio inferior a 3).
SET SERVEROUTPUT ON;
DECLARE
aux_documento ALUMNO.DOCUMENTO_ALUMNO%TYPE := '&documento_ingresado';
aux_nombreALUMNO.nomnbre_alumno%TYPE;
aux_apellido ALUMNO.apellido_alumno%TYPE;
aux_total_suma EXAMEN_ALUMNO.calificacion%TYPE;
aux_total_examenes NUMBER;
BEGIN
--se recuperan y se suman las calificaciones disponibles para el
documento definido
SELECT SUM(EXAMEN_ALUMNO .calificacion) INTO aux_total_suma FROM EXAMEN_ALUMNO EA
JOIN ALUMNO A ON EXAMEN_ALUMNO.id_alumno = ALUMNO.id_alumno
WHERE ALUMNO.documento_alumno LIKEaux_documento;
--se determina el numero de examenes presentados por ese alumno en
particular
SELECT COUNT (EXAMEN_ALUMNO .id_examen) INTO aux_total_examenes
FROM EXAMEN_ALUMNO EA
JOIN ALUMNO A
ON EXAMEN_ALUMNO.id_alumno = ALUMNO.id_alumno
WHERE ALUMNO.documento_alumno LIKE aux_documento;
/*se divide la sumatoria de las calificaciones entre el numero de
examenes y
se evalua frente a lanota minima para aprobar: 3.0*/
IF((aux_total_suma/aux_total_examenes) >= 3.0) THEN
DBMS_OUTPUT.PUT_LINE('El alumno va aprobando el curso');
ELSIF (aux_total_examenes > 0 AND(aux_total_suma/aux_total_examenes) >=3.0) THEN
DBMS_OUTPUT.PUT_LINE('El alumno va aprobando el curso');
ELSE --ocurre cuando no se encuentran examenes presentados por ese alumno
DBMS_OUTPUT.PUT_LINE('NO EXISTEN...
Regístrate para leer el documento completo.