Está en la página 1de 7

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA

FACULTAD DE ING. MINAS, GELOGIA Y CIVIL


ESCUELA DE FORMACIN PROFESIONAL DE INGENIERIA DE SISTEMAS

FUNCIONES EN PL/SQL
I.

OBJETIVOS

II.

Conocer la definicin y utilizacin de funciones.


Crear e invocar funciones propias con PL/SQL.

MARCO TERICO

Definicin de Funcin
Una funcin es un bloque nombrado PL/SQL que devuelve un valor.
Una funcin puede estar almacenada en la B.D., como objeto de la B.D., para

repetidas ejecuciones.

Una funcin puede ser llamada como parte de una expresin.

Los procedimientos y funciones llevan a cabo tareas especficas, y su mayor


diferencia radica en que las funciones devuelven un valor.
SINTAXIS:
CREATE [OR REPLACE] FUNCTION [esquema].nombre-funcin
(nombre-parmetro {IN | OUT | IN OUT} tipo-de-dato, ...)
RETURN tipo-de-dato
{IS | AS}
Declaracin de variables;
Declaracin de constantes;
Declaracin de cursores;
BEGIN
Instrucciones SQL;
Return valor;
EXCEPTION
Bloque de excepciones PL/SQL;
END;

Descripcin de la sintaxis:
Nombre-parmetro: es el nombre que queramos dar al parmetro. Podemos
utilizar Mltiples parmetros. En caso de no necesitarlos, podemos omitir los
parntesis.
IN: especifica que el parmetro es de entrada y que por tanto dicho parmetro tiene
que tener un valor en el momento de llamar a la funcin o procedimiento. Si no se
especifica nada, los parmetros son por defecto de tipo entrada.
Lab. Administracin de Base de Datos
(IS-443)

Prof. Elvira Fernndez

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA


FACULTAD DE ING. MINAS, GELOGIA Y CIVIL
ESCUELA DE FORMACIN PROFESIONAL DE INGENIERIA DE SISTEMAS

OUT: especifica que se trata de un parmetro de salida. Son parmetros cuyo valor
es devuelto despus de la ejecucin el procedimiento al bloque PL/SQL que lo llam.
Las funciones PLSQL no admiten parmetros de salida.
IN OUT: Son parmetros de entrada y salida a la vez.
Tipo-de-dato: Indica el tipo de dato PLSQL que corresponde al parmetro
(NUMBER, VARCHAR2, etc).
Valor: es el valor que la funcin debe devolver y normalmente est almacenado en
una variable.
Desde dnde llamarlas
Como columna de un SELECT.
Condiciones en clusulas WHERE y HAVING.
Clusulas ORDER BY y GROUP BY.
Clusula VALUES de un comando INSERT.
Clusula SET de un comando UPDATE.

Borrado de Funciones
Para quitar una funcin de la parte del servidor, utilizando SQL*Plus, ejecutar el

comando DROP FUNCTION.

Sintaxis:

III.

DESARROLLO
CREANDO UN FUNCION

EJEMPLO 01.
Por medio de una funcin, se desea obtener la suma de 2 nmeros.

Nota: Cada funcin debe devolver un valor del tipo especificado utilizando la sentencia
RETURN.

Lab. Administracin de Base de Datos


(IS-443)

Prof. Elvira Fernndez

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA


FACULTAD DE ING. MINAS, GELOGIA Y CIVIL
ESCUELA DE FORMACIN PROFESIONAL DE INGENIERIA DE SISTEMAS

LLAMADAS A FUNCIONES
Desde un bloque annimo
BEGIN
DBMS_OUTPUT.PUT_LINE(' sUMA DE DOS VARIABLES: '||F_SUMA(15,1000));
END;
Desde una instruccin SQL
SELECT FIRST_NAME,SALARY,F_SUMA(SALARY,COMMISSION_PCT )AS "SALARIO TOTAL"
FROM EMPLOYEES;
Desde otro procedimiento, funcin y triggers
CREATE PROCEDURE proceso ... IS ...
BEGIN ...
/* llamada a la funcin obtener_salario */
w_sal :=F_SUMA (10,2000);
END;

Ojo: Es necesario activar SERVEROUTPUT (SET SERVEROUTPUT ON) para ver

las salidas desde procedimientos o funciones almacenados


Ejemplo2: Crear una funcin que retorne el nombre y apellido de un empleado segn
su cdigo

Ejemplo3: Crear una funcin que retorne el nombre del departamento segn su cdigo
indicado

Lab. Administracin de Base de Datos


(IS-443)

Prof. Elvira Fernndez

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA


FACULTAD DE ING. MINAS, GELOGIA Y CIVIL
ESCUELA DE FORMACIN PROFESIONAL DE INGENIERIA DE SISTEMAS

CONSULTA DE LA TABLA JOB_HISTORY


select EMPLOYEE_ID,START_DATE,END_DATE,JOB_ID,DEPARTMENT_ID from
HR.JOB_HISTORY;
Llamando a las funciones mediante una consulta select
select EMPLOYEE_ID as cod_empleado,F_NOMBRE_EMPLEADO(EMPLOYEE_ID) as
Empleado ,DEPARTMENT_ID,F_NOMBRE_DEPARTAMENTO(DEPARTMENT_id ) as
Departamento
from HR.JOB_HISTORY;

Ejercicio01
Desarrolle una funcin que permita calcular la edad de un cliente, del esquema OE.
Utilizar la funcin para calcular tu edad

Salida1

Lab. Administracin de Base de Datos


(IS-443)

Prof. Elvira Fernndez

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA


FACULTAD DE ING. MINAS, GELOGIA Y CIVIL
ESCUELA DE FORMACIN PROFESIONAL DE INGENIERIA DE SISTEMAS

Salida2

Ejercicio02
Crear una funcin que permita obtener el precio de un producto segn ingresemos el
nombre del producto.

Ejercicio03
Crear una funcin que calcule la cantidad total de pedidos que realiz un cliente.
Invocar con una consulta sql

Ejercicio04
Crear una funcin para mostrar la cantidad de pedidos de un producto x

IV.

TAREA PARA CASA

1-Mostrar a los empleados con su respectivo pas Ingresando el Cdigo de Empleado(HR).

Lab. Administracin de Base de Datos


(IS-443)

Prof. Elvira Fernndez

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA


FACULTAD DE ING. MINAS, GELOGIA Y CIVIL
ESCUELA DE FORMACIN PROFESIONAL DE INGENIERIA DE SISTEMAS

2- Crear una funcin que al ingresar el nombre del departamento nos retorne la cantidad
de empleados.

3.- Crear una funcin que regrese como valor el id_del empleado que tenga el salario ms
grande de un departamento dado.

4. Crear una funcin que regrese los das que han transcurrido desde una fecha dada hasta
la fecha de hoy.

5-crear un procedimiento almacenado cualquiera y desde ste invocar una funcin

Nota: capturar resultados y maneje excepciones.

Lab. Administracin de Base de Datos


(IS-443)

Prof. Elvira Fernndez

UNIVERSIDAD NACIONAL DE SAN CRISTOBAL DE HUAMANGA


FACULTAD DE ING. MINAS, GELOGIA Y CIVIL
ESCUELA DE FORMACIN PROFESIONAL DE INGENIERIA DE SISTEMAS

Lab. Administracin de Base de Datos


(IS-443)

Prof. Elvira Fernndez