You are on page 1of 5

SET SERVEROUTPUT ON;

-----------------------------------------------------------------------------------
--
CREATE OR REPLACE PROCEDURE Agregar_Area (p_descripcion IN pv_area.descripcion
%TYPE)
IS
var1 NUMERIC; var2 VARCHAR(4);
BEGIN
SELECT COUNT(*)+1 INTO var1 FROM pv_area;

IF LENGTH(var1) = 1 THEN var2 := 'A00'||var1;


ELSIF LENGTH(var1) = 2 THEN var2 := 'A0'||var1;
ELSIF LENGTH(var1) = 3 THEN var2 := 'A'||var1;
END IF;

INSERT INTO pv_area VALUES (var2, p_descripcion);


COMMIT;
dbms_output.put_line('Area agregada correctamente.');
END;
/
EXEC Agregar_Area ('SEGURIDAD'); SELECT * FROM pv_area;
--DELETE FROM pv_area WHERE id_area = 'A006';

CREATE OR REPLACE PROCEDURE Listar_Area


IS
p_id_area pv_area.id_area%TYPE;
p_descripcion pv_area.descripcion%TYPE;
var1 numeric;
CURSOR emp_cursor IS SELECT id_area, descripcion FROM pv_area;
BEGIN
OPEN emp_cursor;
LOOP FETCH emp_cursor INTO p_id_area, p_descripcion;
dbms_output.put_line(p_id_area || ': ' || p_descripcion);
SELECT COUNT(*)-1 INTO var1 FROM pv_area;
EXIT WHEN emp_cursor%ROWCOUNT > var1;
END LOOP;
CLOSE emp_cursor;
END;
/
EXEC Listar_Area;

CREATE OR REPLACE PROCEDURE Buscar_Area(p_id_area IN pv_area.id_area%TYPE,


p_descripcion OUT pv_area.descripcion%TYPE)
IS
invalido EXCEPTION;
BEGIN
SELECT descripcion INTO p_descripcion FROM pv_area WHERE id_area = p_id_area;
dbms_output.put_line(p_descripcion);
IF SQL %NOTFOUND THEN RAISE invalido; END IF;
EXCEPTION WHEN invalido THEN dbms_output.put_line('El codigo ingresado no
existe.Intente nuevamente.');
END;
/

DECLARE
p_descripcion pv_area.descripcion%TYPE;
BEGIN
Buscar_Area('A001', p_descripcion);
END;
/

CREATE OR REPLACE PROCEDURE Eliminar_Area(p_id_area IN pv_area.id_area%TYPE)


IS
BEGIN
DELETE FROM pv_area WHERE id_area = p_id_area;
EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('El codigo ingresado no
existe.Intente nuevamente.');
END;
/
EXEC Eliminar_Area('A005');

CREATE OR REPLACE PROCEDURE Modificar_Area(p_id_area IN pv_area.id_area%TYPE,


p_descripcion IN pv_area.descripcion%TYPE)
IS
invalido EXCEPTION;
BEGIN
UPDATE pv_area SET descripcion = p_descripcion WHERE id_area=p_id_area;
IF SQL %NOTFOUND THEN RAISE invalido; END IF;
COMMIT;
dbms_output.put_line('Ha sido modiciado correctamente.');
EXCEPTION WHEN invalido THEN dbms_output.put_line('El codigo que intentas
ingresar no exiete. Intente nuevamente.');
END;
/

-----------------------------------------------------------------------------------
--
CREATE OR REPLACE PROCEDURE Agregar_Cargo (p_descripcion IN pv_area.descripcion
%TYPE)
IS
var1 NUMERIC; var2 VARCHAR(4);
BEGIN
SELECT COUNT(*)+1 INTO var1 FROM pv_cargo;

IF LENGTH(var1) = 1 THEN var2 := 'C00'||var1;


ELSIF LENGTH(var1) = 2 THEN var2 := 'C0'||var1;
ELSIF LENGTH(var1) = 3 THEN var2 := 'C'||var1;
END IF;

INSERT INTO pv_cargo VALUES (var2, p_descripcion);


dbms_output.put_line('Cargo agregado correctamente.');
COMMIT;
END;
/
EXEC Agregar_Cargo ('AUXILIAR'); SELECT * FROM pv_cargo;
--DELETE FROM pv_cargo WHERE id_cargo = 'C005';

CREATE OR REPLACE PROCEDURE Listar_Cargo


IS
p_id_cargo pv_cargo.id_cargo%TYPE;
p_descripcion pv_cargo.descripcion%TYPE;
var1 numeric;
CURSOR emp_cursor IS SELECT id_cargo, descripcion FROM pv_cargo;
BEGIN
OPEN emp_cursor;
LOOP FETCH emp_cursor INTO p_id_cargo, p_descripcion;
dbms_output.put_line(p_id_cargo || ': ' || p_descripcion);
SELECT COUNT(*)-1 INTO var1 FROM pv_cargo;
EXIT WHEN emp_cursor%ROWCOUNT > var1;
END LOOP;
CLOSE emp_cursor;
END;
/
EXEC Listar_Cargo;

CREATE OR REPLACE PROCEDURE Buscar_Cargo(p_id_cargo IN pv_cargo.id_cargo%TYPE,


p_descripcion OUT pv_cargo.descripcion%TYPE)
IS
invalido EXCEPTION;
BEGIN
SELECT descripcion INTO p_descripcion FROM pv_cargo WHERE id_cargo =
p_id_cargo;
dbms_output.put_line(p_descripcion);
IF SQL %NOTFOUND THEN RAISE invalido; END IF;
EXCEPTION WHEN invalido THEN dbms_output.put_line('El codigo ingresado no
existe.Intente nuevamente.');
END;
/

DECLARE
p_descripcion pv_cargo.descripcion%TYPE;
BEGIN
Buscar_Cargo('C001', p_descripcion);
END;
/

CREATE OR REPLACE PROCEDURE Eliminar_Cargo(p_id_cargo IN pv_cargo.cargo%TYPE)


IS
BEGIN
DELETE FROM pv_cargo WHERE id_cargo = p_id_cargo;
EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('El codigo ingresado no
existe.Intente nuevamente.');
END;
/
EXEC Eliminar_Cargo('C005');

CREATE OR REPLACE PROCEDURE Modificar_Cargo(p_id_cargo IN pv_cargo.id_cargo%TYPE,


p_descripcion IN pv_cargo.descripcion%TYPE)
IS
invalido EXCEPTION;
BEGIN
UPDATE pv_cargo SET descripcion = p_descripcion WHERE id_cargo=p_id_cargo;
IF SQL %NOTFOUND THEN RAISE invalido; END IF;
COMMIT;
dbms_output.put_line('Ha sido modiciado correctamente.');
EXCEPTION WHEN invalido THEN dbms_output.put_line('El codigo que intentas
ingresar no exiete. Intente nuevamente.');
END;
/

CREATE OR REPLACE FUNCTION Buscar_DNITrabajador(p_dni IN pv_trabajador.num_dni


%TYPE) RETURN VARCHAR2
IS
FilaEncontrada pv_trabajador%ROWTYPE;
BEGIN
SELECT * INTO FilaEncontrada FROM pv_trabajador WHERE num_dni = p_dni;
dbms_output.put_line(FilaEncontrada.apellido_paterno||' '||
FilaEncontrada.apellido_materno||', '||FilaEncontrada.nombres);
RETURN FilaEncontrada.id_trabajador;
EXCEPTION WHEN NO_DATA_FOUND THEN dbms_output.put_line('El DNI que intentestas
buscar no existe.');
END;
/
SELECT Buscar_DNITrabajador ('75805529') id_trabajador FROM DUAL;

CREATE OR REPLACE PROCEDURE Agregar_Info_Trabajador


(
p_id_trabajador IN pv_info_trabajador.id_trabajador%TYPE,
p_id_sede IN pv_info_trabajador.id_sede%TYPE,
p_id_cargo IN pv_info_trabajador.id_cargo%TYPE,
p_id_area IN pv_info_trabajador.id_area%TYPE,
p_id_estado IN pv_info_trabajador.id_estado%TYPE,
p_f_contrato IN pv_info_trabajador.f_contrato%TYPE,
p_f_sueldo IN pv_info_trabajador.sueldo%TYPE
)
IS
BEGIN
INSERT INTO pv_info_trabajador VALUES (p_id_trabajador, p_id_sede, p_id_cargo,
p_id_area, p_id_estado, p_f_contrato, p_f_sueldo);
COMMIT;
dbms_output.put_line('Area agregada correctamente.');
END;
/
--EXEC Agregar_Info_Trabajador (''); SELECT * FROM pv_info_trabajador;

CREATE OR REPLACE PROCEDURE Listar_Info_Trabajador


IS
p_id_trabajador pv_info_trabajador.id_trabajador%TYPE;
p_id_sede pv_info_trabajador.id_sede%TYPE;
p_id_cargo pv_info_trabajador.id_cargo%TYPE;
p_id_area pv_info_trabajador.id_area%TYPE;
p_id_estado pv_info_trabajador.id_estado%TYPE;
p_f_contrato pv_info_trabajador.f_contrato%TYPE;
p_sueldo pv_info_trabajador.sueldo%TYPE;
var1 numeric;
CURSOR emp_cursor IS SELECT id_trabajador, id_sede, id_cargo, id_area,
id_estado, f_contrato, sueldo FROM pv_info_trabajador;
BEGIN
OPEN emp_cursor;
LOOP FETCH emp_cursor INTO p_id_trabajador, p_id_sede, p_id_cargo, p_id_area,
p_id_estado, p_f_contrato, p_sueldo;
dbms_output.put_line(p_id_trabajador || ': ' || p_id_sede||','||
p_id_cargo||','||p_id_area||','||p_id_estado||','||p_f_contrato||','||p_sueldo);
SELECT COUNT(*)-1 INTO var1 FROM pv_info_trabajador;
EXIT WHEN emp_cursor%ROWCOUNT > var1;
END LOOP;
CLOSE emp_cursor;
END;
/
EXEC Listar_Info_Trabajador;

CREATE OR REPLACE PROCEDURE Listar_PersonalNoActivo


IS
p_id_trabajador pv_info_trabajador.id_trabajador%TYPE;
p_id_sede pv_info_trabajador.id_sede%TYPE;
p_id_cargo pv_info_trabajador.id_cargo%TYPE;
p_id_area pv_info_trabajador.id_area%TYPE;
p_id_estado pv_info_trabajador.id_estado%TYPE;
p_f_contrato pv_info_trabajador.f_contrato%TYPE;
p_sueldo pv_info_trabajador.sueldo%TYPE;
var1 numeric;
CURSOR emp_cursor IS SELECT id_trabajador, id_sede, id_cargo, id_area,
id_estado, f_contrato, sueldo FROM pv_info_trabajador WHERE id_estado='E002';
BEGIN
OPEN emp_cursor;
LOOP FETCH emp_cursor INTO p_id_trabajador, p_id_sede, p_id_cargo, p_id_area,
p_id_estado, p_f_contrato, p_sueldo;
dbms_output.put_line(p_id_trabajador || ': ' || p_id_sede||','||
p_id_cargo||','||p_id_area||','||p_id_estado||','||p_f_contrato||','||p_sueldo);
SELECT COUNT(*)-1 INTO var1 FROM pv_info_trabajador WHERE id_estado='E002';
EXIT WHEN emp_cursor%ROWCOUNT > var1;
END LOOP;
CLOSE emp_cursor;
END;
/
EXEC Listar_PersonalNoActivo;

CREATE OR REPLACE PROCEDURE Modificar_Estado


(
p_id_trabajador IN pv_info_trabajador.id_trabajador%TYPE,
p_id_estado IN pv_info_trabajador.id_estado%TYPE
)
IS
invalido EXCEPTION;
BEGIN
UPDATE pv_info_trabajador SET id_estado = p_id_estado WHERE
id_trabajador=p_id_trabajador;
IF SQL %NOTFOUND THEN RAISE invalido; END IF;
COMMIT;
dbms_output.put_line('Ha sido modiciado correctamente.');
EXCEPTION WHEN invalido THEN dbms_output.put_line('El codigo que intentas
ingresar no exiete. Intente nuevamente.');
END;
/

You might also like