Unidad 5 Funciones y Procedimientos

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

--Procedimientos

--1.Codificar un procedimiento que permita borrar un empleado cuyo número se pasará en la


llamada

CREATE OR REPLACE PROCEDURE deleteEmployee(

num_emple employees.employee_id%TYPE)

AS

exc_notdata exception;

v_row ROWID;

BEGIN

SELECT ROWID INTO v_row FROM employees

WHERE employee_id = num_emple;

DELETE FROM employees WHERE employee_id =num_emple ;

DBMS_OUTPUT.put_line ('Empleado eliminado');

exception

when no_data_found then

dbms_output.put_line('No se esncontraron datos del codigo del empleado o fue eliminado' );

END deleteEmployee;

exec deleteEmployee(140);

select * from employees;

set SERVEROUTPUT ON;

--2.Escribir un procedimiento que modifique la localidad de un departamento. El


procedimiento recibirá

--como parámetros el número del departamento y la localidad nueva.

CREATE OR REPLACE

PROCEDURE modify_location(

num_depart departments.department_id%type,

locality departments.location_id%type)

AS
BEGIN

UPDATE departments SET location_id= locality

WHERE department_id = num_depart;

DBMS_OUTPUT.PUT_LINE('Localizacion actualizada.');

EXCEPTION

when OTHERS then

DBMS_OUTPUT.PUT_LINE('INSERCIÓN FALLIDA.');

END modify_location;

exec modify_location(40,2400);

select * from departments;

--3. Realizar un procedimiento que reciba un número y muestre su tabla de multiplicar hasta el
12.

create or replace procedure tabla_numero(resultado in numeric, numero_hasta in


numeric:=12)

as

numero_tabla numeric:= numero_hasta ;

begin

dbms_output.put_line('Tabla del '||to_char(resultado) || ' del 1 hasta el ' || numero_hasta);

for f in 1..numero_hasta loop

dbms_output.put_line(to_char(resultado)||'x'||to_char(f)||'='||to_char(f*resultado));

end loop;

end;

exec tabla_numero(10);
set SERVEROUTPUT ON;

--4.Crear un procedimiento que inserte un empleado en la tabla EMPLOYEES. Su número será


superior a los

--existentes y la fecha de incorporación a la empresa será la actual.

create or replace procedure insert_employee(

nombre employees.first_name%type,

apellido employees.last_name%type,

email employees.email%type,

numero_tel employees.phone_number%type,

puesto employees.job_id%type,

salario employees.salary%type,

numero_depart employees.department_id%type

as

NUM_EMPLEADO2 employees.employee_id%type ;

fecha2 date;

BEGIN

SELECT MAX(employee_id) INTO NUM_EMPLEADO2 FROM employees;

SELECT SYSDATE INTO FECHA2 FROM DUAL;

NUM_EMPLEADO2:=NUM_EMPLEADO2 +1;

INSERT INTO employees


(employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission
_pct,manager_id,department_id)

VALUES
(NUM_EMPLEADO2,nombre,apellido,email,numero_tel,fecha2,puesto,salario,null,null,numero
_depart);

END;
/

--nombre- apellido- email- numerotel, puesto- salario numerodepar

EXEC
insert_employee('Gustavo','amador','[email protected]','8292791731','IT_PROG',23200,
90);

SELECT * FROM EMPLOYEES;

--5.Escriba un programa en PL / SQL para mostrar una información detallada basada en la tabla
para el empleado

--de ID 149 de la tabla de empleados.

create or replace procedure presentar_empleado(numero_emple employees.employee_id


%type)

as

empleado employees%rowtype;

begin

select * into empleado

FROM employees

where employee_id = numero_emple;

dbms_output.put_line('Nombre: '||empleado.first_name ||' Apellido: ' ||


empleado.last_name ||' Email: ' ||empleado.email ||' Numero Telefonico '

||empleado.phone_number ||' Puesto ' ||empleado.job_id ||' Salario '||


empleado.salary || ' Comision ' ||empleado.commission_pct || ' Numero Departamento

'||empleado.department_id);

end;

exec presentar_empleado(149);
--6.Escriba un procedimiento almacenado que imprima una lista de gerentes y el nombre de
los departamentos.

create or replace procedure gerentes

as

nombre employees.first_name%type;

apellido employees.last_name%type;

depart departments.department_name%type;

cursor gerentes_cursor is

select first_name, last_name, department_name

FROM employees e join departments d

on e.department_id=d.department_id

WHERE job_id='ST_MAN';

begin

open gerentes_cursor;

loop

fetch gerentes_cursor into nombre,apellido,depart;

exit when gerentes_cursor%notfound;

dbms_output.put_line('Nombre : ' ||nombre ||' Apellido: '|| apellido ||' Nombre


Departamento ' || depart);

end loop;

close gerentes_cursor;
end;

exec gerentes();

--Funciones

--1.Escriba una función que reciba una lista de hasta 3 números y visualice su suma.

CREATE OR REPLACE FUNCTION SUMA_TRES_VALORES(

v_num1 number,v_num2 number, v_num3 number

RETURN NUMBER

AS

v_num_uno number:=v_num1;

v_num_dos number:=v_num2;

v_num_tres number:=v_num3;

total number:=0;

BEGIN

total :=v_num_uno+v_num_dos+v_num_tres;

return total;

END;

set SERVEROUTPUT ON;

declare
v_suma number;

begin

v_suma:=SUMA_TRES_VALORES(10,10,10);

dbms_output.put_line('La suma es igual a ' || v_suma);

end;

--2.Escriba una función que reciba el empleado y devuelva su salario.

create or replace function empleado_salario(codigo_emp employees.employee_id%type)

return number

as

v_salary employees.salary%TYPE;

begin

select salary into v_salary from employees

where employee_id = codigo_emp;

return v_salary;

end;

declare

v_salary employees.salary%TYPE;

begin

v_salary:=empleado_salario(102);

dbms_output.put_line('El salario del empleado es ' || v_salary);

exception

when NO_DATA_FOUND THEN

dbms_output.put_line('Este empleado no esta registrado');

when OTHERS then


dbms_output.put_line('Este empleado no esta registrado');

end;

select * from employees;

--3.Escriba una función que identificar el empleado con el salario mas alto y devuelva dicho
valor.

create or replace function salario_maximo

return number

as

v_salary employees.salary%TYPE;

begin

select max(salary) into v_salary from employees ;

return v_salary;

end;

declare

v_salary employees.salary%TYPE;

begin

v_salary:=salario_maximo();

dbms_output.put_line('El salario mas alto del empleado es ' || v_salary);

exception

when NO_DATA_FOUND THEN

dbms_output.put_line('Este empleado no esta registrado');

when OTHERS then

dbms_output.put_line('Este empleado no esta registrado');

end;
--4.Escriba una función que reciba un empleado y retorne el tiempo de el tiempo laborando en
la empresa.

create or replace function empleado_fecha(codigo_emp employees.employee_id%type)

return date

as

v_emp_fecha employees.hire_date%TYPE;

begin

select hire_date into v_emp_fecha from employees

where employee_id = codigo_emp;

return v_emp_fecha;

end;

declare

v_emp_fecha employees.hire_date%TYPE;

begin

v_emp_fecha:=empleado_fecha(103);

dbms_output.put_line('El salario del empleado es ' || v_emp_fecha);

exception

when NO_DATA_FOUND THEN

dbms_output.put_line('Este empleado no esta registrado');

when OTHERS then

dbms_output.put_line('Este empleado no esta registrado');

end;

--5.Escriba una función que recibe una letra y devuelva si es vocal o consonante.

create or replace function vocal_consonante(letra in CHAR)

return VARCHAR2

as
v_letra CHAR(1):= letra;

v_V CHAR(1):='V';

v_C CHAR(1):='C';

begin

v_letra:=letra;

if v_letra='a' or v_letra='A' or v_letra='e' or v_letra='E' or v_letra='i' or v_letra='I' or


v_letra='O' or v_letra='o' or v_letra='u' or v_letra='U'then

return v_V;

else

return v_c;

end if;

end;

declare

letra CHAR(1);

begin

letra:=vocal_consonante('m');

if letra = 'V' then

dbms_output.put_line('Es una Vocal');

else

dbms_output.put_line('Es una consonante');

end if;

end;

También podría gustarte