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.
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