Sie sind auf Seite 1von 5

Captulo 7 - Funciones y Funciones

Almacenadas
Las funciones guardan mucha similitud con los procedimientos, la diferencia es que una
funcin debe devolver un valor propio de la funcin, la cual puede ser asignada a una
variable o funcin. Debido a este mecanismo las funciones pueden ser utilizadas dentro de
sentencias SQL, adems de poder ser usadas en bloques annimos, procedimientos u otras
funciones.

DECLARACIN DE FUNCIONES
Antes de mostrar un ejemplo de funcin, veamos primero la sintaxis de una:
FUNCTION <NOMBRE_FUNCION> (<PARAMETROS>)
RETURN <TIPO_DATO_RETORNO>
IS
<VARIABLES>
BEGIN
<CODIGO PL/SQL>
END;

Dnde:

<NOMBRE_FUNCION>: Es el nombre con el que se podr identificar a la funcin

<PARAMETROS>: Los parmetros que usar la funcin como datos de entrada.

<TIPO_DATO_RETORNO>: Se debe indicar el tipo de dato que va a devolver la


funcin.

<VARIABLES>: Variables que necesitemos para realizar operaciones en la funcin.


stas variables sern de uso esclusivo de la funcin.

<CODIGO PL/SQL>: Cdigo PL/SQL que ejecutar la funcin cada vez que sea
llamada.

Vemos un ejemplo:
01 DECLARE
02
--Declaramos las variables de nuestro bloque annimo.
03
V_VAR_SUMA
NUMBER;
04
05
--Declaramos la funcin SUMAR_NUMEROS

06
07
08
09
10
11
12
13
14
15
16

FUNCTION SUMAR_NUMEROS(P_NUMEROA
NUMBER,
P_NUMEROB
NUMBER)
--El tipo de dato que devolver la funcin es NUMBER
RETURN NUMBER
IS
--Creamos una variable para almacenar el valor de la operacin.
V_RESULTADO
NUMBER;
BEGIN
-- Operamos
V_RESULTADO := P_NUMEROA + P_NUMEROB;

-- Y el valor de V_RESULTADO ser devuelto como el valor de la


funcin.
18
RETURN V_RESULTADO;
19
END;
20
21
BEGIN
22
-- Usamos la funcin directamente.
23
DBMS_OUTPUT.PUT_LINE('La suma es: ' || SUMAR_NUMEROS(10,80) );
24
25
--Almacenamos el valor de la funcin en una variable.
26
--para imprimirlo posteriormente.
27
V_VAR_SUMA := SUMAR_NUMEROS(100,50);
28
DBMS_OUTPUT.PUT_LINE('La suma es: ' || V_VAR_SUMA);
29
END;
La suma es: 90
La suma es: 150
17

Como se puede observar, la funcin SUMAR_NUMEROS es pasada como un parmetro


para la funcin DBMS_OUTPUT.PUT_LINE o se puede guardar el valor de retorno de la
funcin en una variable. Esto es posible debido a que la funcin SUMAR_NUMEROS
devuelve un valor del tipo NUMBER.

FUNCIONES ALMACENADAS
Al igual que en los procedimientos, las funciones tambin pueden ser almacenadas en la
base de datos. Para almacenar una funcin en la base de datos slo debemos adicionar la
palabra CREATE a la declaracin de la funcin.
Para compilar o almacenar una funcin en una base de datos se debe ejecutar slo el cdigo
de la declaracin del procedimiento sin el bloque annimo.
01 --Declaracin de la funcin
02 CREATE OR REPLACE FUNCTION HR.SUMAR_NUMEROS(P_NUMEROA
NUMBER,
03
P_NUMEROB
NUMBER)
04 --El tipo de dato que devolver la funcin es NUMBER
05
RETURN NUMBER
06
IS
07
--Creamos una variable para almacenar el valor de la operacin.

08
09
10
11
12

V_RESULTADO
NUMBER;
BEGIN
-- Operamos
V_RESULTADO := P_NUMEROA + P_NUMEROB;

-- Y el valor de V_RESULTADO ser devuelto como el valor de la


funcin.
14
RETURN V_RESULTADO;
15
END;
13

Puedes utilizar las palabras reservadas CREATE OR REPLACE, de sta manera no saldr
un error cuando intentes compilar tu funcin por segunda vez.
Al crear una funcin almacenada, SQL Developer nos mostrar el siguiente mensaje:

Las funciones almacenadas pueden ser utilizadas en bloques annimos:


01
02
03
04
05
06
07

DECLARE
V_VARIABLE NUMBER;
BEGIN
--Almacenamos el valor de la funcin almacenada
--en una variable para imprimirlo posteriormente.
V_VARIABLE := HR.SUMAR_NUMEROS(300,50);

08
--Mostramos el resultado de la operacin
09
DBMS_OUTPUT.PUT_LINE('La suma es: ' || V_VARIABLE);
10 END;
La suma es: 350

Adicionalmente, las funciones pueden ser usadas en sentencias SQL, veamos un ejemplo
para sumar los campos min_salary y max_salary de la tabla hr.jobs:
1 -- Usamos la funcin HR.SUMAR_NUMEROS, para realizar
2 -- una suma con los campos min_salary y max_salary
3
-- de la tabla hr.jobs
4
SELECT job_id,
5
job_title,
6
min_salary,
7
max_salary,
8
HR.SUMAR_NUMEROS(min_salary,max_salary) as SUMA
9
FROM hr.jobs;
JOB_ID
JOB_TITLE
MIN_SALARY
MAX_SALARY
SUMA
---------- ----------------------------------- ---------- ------------------AD_PRES
President
20080
40000
60080
AD_VP
Administration Vice President
15000
30000
45000
AD_ASST
Administration Assistant
3000
6000
9000
FI_MGR
Finance Manager
8200
16000
24200
FI_ACCOUNT Accountant
4200
9000
13200
AC_MGR
Accounting Manager
8200
16000
24200
AC_ACCOUNT Public Accountant
4200
9000
13200
SA_MAN
Sales Manager
10000
20080
30080
SA_REP
Sales Representative
6000
12008
18008
PU_MAN
Purchasing Manager
8000
15000
23000
PU_CLERK
Purchasing Clerk
2500
5500
8000
JOB_ID
MAX_SALARY
------------------ST_MAN
14000
ST_CLERK
5000

JOB_TITLE
MIN_SALARY
SUMA
----------------------------------- ---------- ---------Stock Manager

5500

Stock Clerk
7008

2008

8500

SH_CLERK
5500
IT_PROG
14000
MK_MAN
24000
MK_REP
13000
HR_REP
13000
PR_REP
15000

Shipping Clerk
8000
Programmer

2500
4000

10000

Marketing Manager

9000

15000

Marketing Representative

4000

9000

Human Resources Representative

4000

9000

Public Relations Representative

4500

10500

El uso de funciones son muy tiles en el caso de necesitar realizar operaciones entre
columnas de una o varias tablas, de sta manera podras disminuir la complejidad de tus
consultas SQL.

Das könnte Ihnen auch gefallen