Funciones en PL/SQL

Hola a todos, hoy os explicare como realizar funciones en PL/SQL.

Al igual que en programación, en PL/SQL podemos hacer funciones para tener código reutilizable y llamarlas cuando necesitemos.

Para hacer funciones tenemos que hacer algo parecido a bloques anónimos pero cambia en algunas cosas.

Os pongo un simple ejemplo de función en PL/SQL:


create or replace function Pagos_cliente(v_codigocliente clientes.codigocliente%type)
return Number
as
  v_sumapagos pagos.cantidad%type := 0;
begin
  
  select sum(cantidad) into v_sumapagos
  from pagos
  where codigocliente = v_codigocliente;

  return v_sumapagos;

end;
/

Fíjate que empezamos con create or replace function y el nombre de la función, el replace es opcional, después van los parámetros que le vamos a pasar.

IMPORTANTE: Si se modifica algo de la función, deberás compilarla de nuevo.

Como es una función, tenemos que poner un return y el tipo a devolver, aquí no es necesario poner la longitud. En nuestro caso, Number.

El as es como el declare en un bloque anónimo.

En el resto, es como hemos visto, pero al ser una función, en algún momento necesitamos devolver algún valor, lo hacemos con return, debe ser del mismo tipo que hemos indicado mas arriba.

Si tenemos una excepción, también deberíamos devolver algún valor.


create or replace function Pagos_cliente(v_codigocliente clientes.codigocliente%type)
return Number
as
  v_sumapagos pagos.cantidad%type := 0;
begin
  
  select sum(cantidad) into v_sumapagos
  from pagos
  where codigocliente = v_codigocliente;

  if v_sumapagos is null then
    raise no_data_found;
  else
    return v_sumapagos;
  end if;
exception
  when no_data_found then
    return -1;

end;
/

Por ultimo, vamos a ver como se pueden llamar.

 

Para llamarlo desde un bloque anónimo:


declare
  v_codigocliente clientes.codigocliente%type := &codigo;
  v_suma pagos.cantidad%type;
begin
  v_suma := Pagos_cliente(v_codigocliente);
  if v_suma = -1 then
    DBMS_OUTPUT.PUT_LINE('El cliente no existe');
  else
    DBMS_OUTPUT.PUT_LINE('La suma de pagos es ' || v_suma);
  end if;
  
end;
/

Fíjate que uso una variable donde guardo el resultado de la función para luego utilizarlo.

También lo podemos llamar en una consulta, algo asi:


select Pagos_cliente(3) as Pagos_cliente_3 
from dual;

El resultado es el siguiente:

Os dejo un ejercicio de funciones.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

1 comentario

  1. Mario Bello

    Disculpa las molestias pero estoy estudiando dan y estoy con la asignatura de base de datos, tengo que realizar funciones y procedimientos, o soy capaz de realizarlo. Me gustaría mandarte un ejemplo para me explicarás donde tengo el error.

    Muchas gracias

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *