Escolar Documentos
Profissional Documentos
Cultura Documentos
FUNCIONES
ALUMNOS:
Minaya Alejandro
Díaz Paredes Victor Oswaldo
León Apaclla
Alvarez
DOCENTE:
Cesar Pisconte
AULA: TURNO:
Anexo Noche
SISE
SEDE COMAS - LIMA
25 de Marzo de 2018
Procedimientos y funciones
Oracle permite acceder y manipular información de la base de datos definiendo objetos
procedurales (subprogramas) que se almacenan en la base de datos. Estos objetos
procedurales son unidades de programa PL/SQL.
Los procedimientos o funciones PL/SQL son subprogramas o bloques PL/SQL con nombre,
compuestos por un conjunto de sentencias SQL que pueden recibir parámetros y pueden ser
invocados desde distintos entornos (SQL*PLUS, Oracle*Forms). Desde otros procedimientos y
funciones, y desde otras herramientas Oracle y aplicaciones.
Funciones y procedimientos PL/SQL no son muy diferentes. Un procedimiento o función está
constituido por un conjunto de sentencias SQL y PL/SQL lógicamente agrupados para realizar
una tarea específica. Los procedimientos y funciones almacenados constituyen un bloque de
código PLSQL que ha sido compilado y almacenado en las tablas del sistema de la base de
datos Oracle.
Los procedimientos o funciones PLSQL son dinámicos ya que admiten parámetros que les
pueden ser pasados antes de su ejecución. Por lo tanto, un procedimiento o función puede
realizar diferentes tareas dependiendo de los parámetros que le hayan pasado.
Los procedimientos y funciones Oracle están compuestos por una parte en la que se definen
de variables y cursores, otra parte ejecutable compuesta por sentencias SQL y PLSQL, y otra
parte opcional enfocada a manejar las excepciones y errores ocurridos durante la ejecución.
Los pasos que sigue Oracle para ejecutar un procedimiento o función son los siguientes:
- Verificar si el usuario tiene permiso de ejecución.
- Verificar la validez del procedimiento o función.
- Ejecutarlo.
Los procedimientos y funciones llevan a cabo tareas específicas, la diferencia más importante
entre los procedimientos y las funciones es que una función, al final de su ejecución, devuelve
un valor al bloque PL/SQL que la llamó. Sin embargo, en los procedimientos esto no es posible,
aunque si podemos definir múltiples parámetros de salida que se devolverían al bloque PL/SQL
desde el que se ejecutó el procedimiento.
Descripción de la sintaxis:
Nombre-parámetro: es el nombre que nosotros queramos dar al parámetro. Podemos utilizar
múltiples parámetros. En caso de no necesitarlos podemos omitir los paréntesis.
IN: especifica que el parámetro es de entrada y que por tanto dicho parámetro tiene que tener
un valor en el momento de llamar a la función o procedimiento. Si no se especifica nada, los
parámetros son por defecto de tipo entrada.
OUT: especifica que se trata de un parámetro de salida. Son parámetros cuyo valor es devuelto
después de la ejecución el procedimiento al bloque PL/SQL que lo llamó. Las funciones PLSQL
no admiten parámetros de salida.
DECLARE
vsalario NUMBER;
BEGIN
procedimiento1 (3213, vsalario)
dbms_output.put_line
('El salario del empleado 3213 es ', vsalario);
END;
Ejemplo de ejecución desde SQL de un procedimiento PL/SQL que sólo utiliza parámetros de
entrada:
PROCEDIMIENTOS.
CREATE {OR REPLACE} PROCEDURE nombre_proc( param1 [IN | OUT | IN OUT] tipo,... )
IS
-- Declaración de variables locales
BEGIN
-- Instrucciones de ejecución
[EXCEPTION]
-- Instrucciones de excepción
END;
Al especificar el tipo de dato del parámetro no debemos especificar la longitud del tipo,
aunque si puede ser utilizando el operador %TYPE.
También podemos asignar un valor por defecto a los parámetros, utilizando la cláusula
DEFAULT o el operador de asignación (:=).
CREATE OR REPLACE PROCEDURE Actualiza_Saldo(cuenta NUMBER, new_saldo NUMBER
DEFAULT 10)
Una vez creado y compilado el procedimiento almacenado podemos ejecutarlo. Existen dos
formas de pasar argumentos a un procedimiento almacenado a la hora de ejecutarlo:
Notación posicional.
Se pasan los valores de los parámetros en el mismo orden en que el procedure los define.
BEGIN
Actualiza_Saldo(200501,2500);
COMMIT;
END;
Notación nominal.
Se pasan los valores en cualquier orden nombrando explícitamente el parámetro y su valor
separados por el símbolo =>.
BEGIN
Actualiza_Saldo(cuenta => 200501,nuevo_saldo => 2500);
COMMIT;
END;
FUNCIONES.
Se pueden emplear las funciones del sistema en cualquier lugar en el que se permita una
expresión en una sentencia "select".
Las funciones, como los procedimientos almacenados son bloques de código que permiten
agrupar y organizar sentencias SQL que se ejecutan al invocar la función.
Las funciones tienen una estructura similar a la de los procedimientos. Como los
procedimientos, las funciones tienen una cabecera, una sección de declaración de variables y
el bloque "begin... end" que encierra las acciones. Una función, además contiene la cláusula
"return".
Para crear una función empleamos la instrucción "create function" o "create or replace
function". Si empleamos "or replace", se sobre escribe (se reemplaza) una función existente; si
se omite y existe una función con el nombre que le asignamos, Oracle mostrará un mensaje de
error indicando tal situación.
Cada función debe devolver un valor del tipo especificado utilizando la sentencia RETURN.
Para asignar un valor a una variable, dentro de una función DEBE usarse ":=" (dos puntos e
igual).
Estructuras de control
IF
IF (expresion) THEN
...
ELSIF (expresion) THEN
...
ELSE
...
END IF;
WHILE
FOR
CASE
CASE var
WHEN 'valor' THEN
...
WHEN 'valor2' THEN
...
ELSE
...
END CASE;
Saber cuándo se debe desarrollar Procedures en Oracle y Function en Oracle es una decisión
muy importante que se debe tomar a la hora de construir un sistema que sea eficiente,
modular, ordenado y fácil de mantener.
Para determinar si debes utilizar Procedures en Oracle tienes que responder de forma
afirmativa a las siguientes preguntas:
Por ejemplo, si necesitas un proceso que te permita obtener los datos de un empleado en
particular, las respuestas a las preguntas 1 y 2 es SI,
Para determinar si debes utilizar una Function en Oracle tienes que responder de forma
afirmativa a las siguientes preguntas:
1. ¿Lo que debo construir será usado de forma masiva por otros procesos?
2. ¿Necesito obtener siempre un solo resultado?
Por ejemplo, si te das cuenta que en varios procesos que debes desarrollar en tu sistema
siempre necesitas obtener la edad de un empleado para poder determinar ciertas acciones, las
respuestas a las preguntas 1 y 2 es SI.
Una Function en Oracle puede recibir uno o varios parámetros de entrada pero siempre
retornara un solo valor, en este caso la edad del empleado. Esta Function puede ser utilizada
por cualquier proceso que requiera obtener la edad del empleado.
En resumen para poder determinar si se debe utilizar Procedures en Oracle o una Function en
Oracle solo se deben responder dos preguntas fáciles, para el caso del Procedure debes
preguntarte ¿La cantidad de parámetros de entrada y salida que necesitas obtener?, y para el
caso de la Function debes preguntarte si ¿Lo que se necesita será usado masivamente por
otros procesos y si solo requieres un valor como resultado?
CONCLUSIÓN.
Los Procedures en Oracle siempre deben recibir al menos un parámetro de entrada y deberá
tener uno o varios parámetros de salida, pueden haber excepciones donde tal vez no necesites
parámetros de salida, pero por lo menos se debe tener un parámetro que indique si el proceso
termino correctamente.