Está en la página 1de 2

CREATE TABLE Estudiantes (

estudiante_id NUMBER,
nombre VARCHAR2(50),
apellido VARCHAR2(50),
telefono VARCHAR2(20)
);

-- Procedimiento para Insertar un Estudiante


CREATE OR REPLACE PROCEDURE InsertarEstudiante(
estudiante_id_in NUMBER,
nombre_in VARCHAR2,
apellido_in VARCHAR2,
telefono_in VARCHAR2
) AS
BEGIN
INSERT INTO Estudiantes (estudiante_id, nombre, apellido, telefono)
VALUES (estudiante_id_in, nombre_in, apellido_in, telefono_in);
COMMIT;
END InsertarEstudiante;

-- Llamar al procedimiento InsertarEstudiante con valores específicos


BEGIN
InsertarEstudiante(1, 'Juan', 'Pérez', '123-456-7890');
InsertarEstudiante(2, 'María', 'González', '987-654-3210');
END;

-- Procedimiento para Listar Estudiantes con Ordenación por Nombre y Apellido


CREATE OR REPLACE PROCEDURE ListarEstudiantesConCursorOrdenados IS
CURSOR c_estudiantes IS
SELECT * FROM Estudiantes
ORDER BY nombre, apellido;
v_estudiante Estudiantes%ROWTYPE;
BEGIN
OPEN c_estudiantes;
DBMS_OUTPUT.PUT_LINE('ID | NOMBRE | APELLIDO | TELÉFONO');
DBMS_OUTPUT.PUT_LINE('------------------------------------');
LOOP
FETCH c_estudiantes INTO v_estudiante;
EXIT WHEN c_estudiantes%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_estudiante.estudiante_id || ' | ' ||
v_estudiante.nombre || ' | ' || v_estudiante.apellido || ' | ' ||
v_estudiante.telefono);
END LOOP;
CLOSE c_estudiantes;
END ListarEstudiantesConCursorOrdenados;

-- Llamar al procedimiento ListarEstudiantesConCursorOrdenados


BEGIN
ListarEstudiantesConCursorOrdenados;
END;

-- Procedimiento para Actualizar un Estudiante por ID utilizando un cursor


CREATE OR REPLACE PROCEDURE ActualizarEstudianteConCursor(
estudiante_id_in NUMBER,
nombre_in VARCHAR2,
apellido_in VARCHAR2,
telefono_in VARCHAR2
) AS
CURSOR c_estudiante IS
SELECT * FROM Estudiantes WHERE estudiante_id = estudiante_id_in;
v_estudiante Estudiantes%ROWTYPE;
BEGIN
OPEN c_estudiante;
FETCH c_estudiante INTO v_estudiante;

IF c_estudiante%FOUND THEN
UPDATE Estudiantes
SET nombre = nombre_in, apellido = apellido_in, telefono = telefono_in
WHERE estudiante_id = estudiante_id_in;
COMMIT;
DBMS_OUTPUT.PUT_LINE('Estudiante actualizado correctamente.');
ELSE
DBMS_OUTPUT.PUT_LINE('El estudiante con ID ' || estudiante_id_in || ' no
existe en la base de datos.');
END IF;

CLOSE c_estudiante;
END ActualizarEstudianteConCursor;

-- Llamar al procedimiento ActualizarEstudianteConCursor con el ID del estudiante


que deseas actualizar
BEGIN
ActualizarEstudianteConCursor(1, 'NuevoNombre', 'NuevoApellido',
'NuevoTelefono');
END;

-- Procedimiento para Eliminar un Estudiante por ID utilizando un cursor


CREATE OR REPLACE PROCEDURE EliminarEstudianteConCursor(estudiante_id_in NUMBER) AS
CURSOR c_estudiante IS
SELECT * FROM Estudiantes WHERE estudiante_id = estudiante_id_in;
v_estudiante Estudiantes%ROWTYPE;
BEGIN
OPEN c_estudiante;
FETCH c_estudiante INTO v_estudiante;

IF c_estudiante%FOUND THEN
DELETE FROM Estudiantes WHERE estudiante_id = estudiante_id_in;
COMMIT;
DBMS_OUTPUT.PUT_LINE('Estudiante eliminado correctamente.');
ELSE
DBMS_OUTPUT.PUT_LINE('El estudiante con ID ' || estudiante_id_in || ' no
existe en la base de datos.');
END IF;

CLOSE c_estudiante;
END EliminarEstudianteConCursor;

-- Llamar al procedimiento EliminarEstudianteConCursor con el ID del estudiante que


deseas eliminar
BEGIN
EliminarEstudianteConCursor(1);
END;

También podría gustarte