Está en la página 1de 18

PROCEDIMIENTOS

ALMACENADOS
2017

Tecnologa de la Programacin II
Procedimientos Almacenados - UNT

X JXJZJXZ

UNIVERSIDAD NACIONAL DE
TRUJILLLO
FACULTAD DE INGENIERA

ESCUELA DE INGENIERA DE SISTEMAS

TEMA:

PROCEDIMIENTOS ALMACENADOS

CURSO:

TECNOLOGA DE LA PROGRAMACIN II

PROFESOR:

MG. ZORAIDA YANET VIDAL MELGAREJO

INTEGRANTES:

ANCHORENA DAZ, MANUEL


DAZ PAREDES, JORGE
ROSAS MONTOYA, RAUL
SICCHE ROSALES, LUIS
ZEGARRA DAZ, ALISSON

TRUJILLO PER
2017
PREFIX A POSTFIX

TECNOLOGA DE LA PROGRAMACIN II I 2
Procedimientos Almacenados - UNT

CONTENIDO

Introduccion .................................................................... 4
Definicin ........................................................................ 5
Utilidad ............................................................................ 6
Ventaja............................................................................ 6
Desventajas .................................................................... 8
Create Procedure ........................................................... 9
La Sentencia CALL ......................................................... 9
La Sentencia Compuesta BEGINEND ........................ 9
Sentencia DECLARE ...................................................... 9
Variables en Procedimientos almacenados ................. 10
Constructores de Control de Flujo ................................ 12
Ejemplos ....................................................................... 15
Bibliografa .................................................................... 15

TECNOLOGA DE LA PROGRAMACIN II I 3
Procedimientos Almacenados - UNT

INTRODUCCIN
Un procedimiento, tambin denominado procedimiento almacenado, es una rutina que se
puede llamar para realizar operaciones que pueden incluir sentencias de SQL.

Los procedimientos se clasifican como procedimientos de SQL o procedimientos externos.


Los procedimientos de SQL slo contienen sentencias de SQL. Los procedimientos
externos hacen referencia a un programa de lenguaje principal que puede o no contener
sentencias de SQL. DB2 para z/OS da soporte a los siguientes tipos de procedimientos:

Procedimientos almacenados externos


Los procedimientos almacenados externos son procedimientos que se escriben en un
lenguaje principal y pueden contener sentencias de SQL. El cdigo fuente de los
procedimientos externos es distinto de la definicin. Puede escribir un procedimiento
almacenado externo en Assembler, C, C++, COBOL, Java, REXX o PL/I. Todos los
programas se deben disear para que se ejecuten utilizando Lenguaje Environment. Los
procedimientos almacenados COBOL y C++ pueden contener extensiones orientadas a
objetos.
Procedimientos de SQL externos
Los procedimientos de SQL externos son procedimientos cuyo cuerpo est escrito en SQL.
DB2 da soporte a este tipo de procedimientos generando un programa C asociado para
cada procedimiento. Todos los procedimientos de SQL creados antes de la Versin 9.1 son
procedimientos de SQL externos. A partir de la Versin 9.1, se puede crear un
procedimiento de SQL externo especificando FENCED o EXTERNAL en la sentencia
CREATE PROCEDURE.
Procedimientos de SQL nativos
Los procedimientos de SQL nativos son procedimientos cuyo cuerpo est escrito en SQL.
Para procedimientos de SQL nativos, DB2 no genera un programa C asociado. A partir de
la Versin 9.1, todos los procedimientos de SQL creados sin las opciones FENCED o
EXTERNAL en la sentencia CREATE PROCEDURE son procedimientos de SQL nativos.
Se pueden crear procedimientos de SQL nativos en un paso. Las sentencias de SQL
nativos dan soporte a ms funciones y generalmente proporcionan un mejor rendimiento
que las sentencias de SQL externas.

Las sentencias de control de SQL estn soportadas en procedimientos de SQL. Las


sentencias de control son sentencias de SQL que permiten utilizar SQL de una forma
similar a la escritura de un programa en un lenguaje de programacin estructurado. Las
sentencias de control de SQL proporcionan la posibilidad de controlar el flujo lgico,
declaran y establecen variables, y manejan avisos y excepciones. Algunas sentencias de
control de SQL incluyen otras sentencias de SQL anidadas.

Los procedimientos de SQL proporcionan las mismas ventajas que los procedimientos de
un lenguaje principal. Es decir, una parte de un cdigo debe escribirse y mantenerse una
sola vez y puede llamarse desde varios programas.

Los procedimientos de SQL proporcionan ventajas adicionales cuando contienen


sentencias de SQL. En este caso, los procedimientos de SQL pueden reducir o eliminar
retrasos en la red asociados con la comunicacin entre el cliente y el servidor, y entre cada
sentencia de SQL. Los procedimientos de SQL pueden mejorar la seguridad al permitir que
el usuario invoque un nico procedimiento en lugar de ejecutar el SQL que el
procedimiento contiene.

Para definir procedimientos utilice la sentencia CREATE PROCEDURE.

TECNOLOGA DE LA PROGRAMACIN II I 4
Procedimientos Almacenados - UNT

PROCEDIMIENTOS ALMACENADOS

DEFINICIN

Un procedimiento almacenado (stored procedure en ingls) es


un programa (o procedimiento) almacenado fsicamente en una base de datos. Su
implementacin vara de un gestor de bases de datos a otro. La ventaja de un
procedimiento almacenado es que al ser ejecutado, en respuesta a una peticin de
usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente
corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita
manipular y slo necesita enviar sus resultados de regreso al usuario, deshacindose de
la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.

Usos tpicos para procedimientos almacenados incluyen la validacin de datos siendo


integrados a la estructura de base de datos (los procedimientos almacenados utilizados
para este propsito a menudo son llamados disparadores; triggers en ingls), o
encapsular un proceso grande y complejo. El ltimo ejemplo generalmente ejecutar ms
rpido como un procedimiento almacenado que de haber sido implementado como, por
ejemplo, un programa corriendo en el sistema cliente y comunicndose con la base de
datos mediante el envo de consultas SQL y recibiendo sus resultados.

Los procedimientos pueden ser ventajosos: Cuando una base de datos es manipulada
desde muchos programas externos. Al incluir la lgica de la aplicacin en la base de datos
utilizando procedimientos almacenados, la necesidad de embeber la misma lgica en
todos los programas que acceden a los datos es reducida. Esto puede simplificar la
creacin y, particularmente, el mantenimiento de los programas involucrados.

Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una
misma operacin en un servidor dentro de algunas o todas las bases de datos y a la vez
dentro de todas o algunas de las tablas de las bases de datos del mismo. Para ello
podemos utilizar a los Procedimientos almacenados auto creables que es una forma de
generar ciclos redundantes a travs de los procedimientos almacenados.

TECNOLOGA DE LA PROGRAMACIN II I 5
Procedimientos Almacenados - UNT

UTILIDAD

Los procedimientos almacenados son muy tiles. A continuacin, enlisto algunos de los
posibles usos que pueden darse a estos objetos de la base de datos. Por ejemplo, si
deseamos obtener un reporte complejo que incluya instrucciones condicionales y clculos
complejos con datos obtenidos de varias tablas, un procedimiento almacenado es nuestro
mejor aliado. Tambin podemos ejecutar complejos procesos que a veces tardan horas
cuando son ejecutados desde el cliente, ya que en tales casos la informacin debe pasar
del servidor al cliente y viceversa. Cuando utilizamos un procedimiento almacenado, ste
es ejecutado por InterBase que a su vez es ejecutado en la computadora servidor. Casi
siempre las computadoras servidores son poderosas mquinas con mucha memoria,
discos rpidos y uno o ms procesadores tambin muy rpidos. Por lo tanto, al ejecutar
los procesos mediante procedimientos almacenados estamos aprovechando toda esa
capacidad de cmputo disponible en el hardware del servidor.

VENTAJAS

Trfico de red reducido entre el cliente y el servidor

Los comandos de un procedimiento se ejecutan en un nico lote de cdigo. Esto


puede reducir significativamente el trfico de red entre el servidor y el cliente
porque nicamente se enva a travs de la red la llamada que va a ejecutar el
procedimiento. Sin la encapsulacin de cdigo que proporciona un procedimiento,
cada una de las lneas de cdigo tendra que enviarse a travs de la red.

Mayor seguridad

Varios usuarios y programas cliente pueden realizar operaciones en los objetos de


base de datos subyacentes a travs de un procedimiento, aunque los usuarios y los
programas no tengan permisos directos sobre esos objetos subyacentes. El
procedimiento controla qu procesos y actividades se llevan a cabo y protege los
objetos de base de datos subyacentes. Esto elimina la necesidad de conceder
permisos en cada nivel de objetos y simplifica los niveles de seguridad.

La clusula EXECUTE AS puede especificarse en la instruccin CREATE


PROCEDURE para habilitar la suplantacin de otro usuario o para permitir que los
usuarios o las aplicaciones puedan realizar ciertas actividades en la base de datos
sin necesidad de contar con permisos directos sobre los objetos y comandos
subyacentes. Por ejemplo, algunas acciones como TRUNCATE TABLE no tienen
permisos que se puedan conceder. Para poder ejecutar TRUNCATE TABLE, el
usuario debe tener permisos ALTER en la tabla especificada. Puede que la
concesin de permisos ALTER a un usuario en una tabla no sea lo ideal, pues en
realidad el usuario tendr permisos muy superiores a la posibilidad de truncar una
tabla. Si se incorpora la instruccin TRUNCATE TABLE en un mdulo y se
especifica la ejecucin del mdulo como un usuario con permisos para modificar la
tabla, se pueden ampliar los permisos para truncar la tabla al usuario al que se
concedan permisos EXECUTE para el mdulo.

TECNOLOGA DE LA PROGRAMACIN II I 6
Procedimientos Almacenados - UNT

Al llamar a un procedimiento a travs de la red, solo est visible la llamada que va


a ejecutar el procedimiento. Por lo tanto, los usuarios malintencionados no pueden
ver los nombres de los objetos de base de datos y tabla, incrustados en sus propias
instrucciones Transact-SQL, ni buscar datos crticos.

El uso de parmetros de procedimientos ayuda a protegerse contra ataques por


inyeccin de cdigo SQL. Dado que la entrada de parmetros se trata como un
valor literal y no como cdigo ejecutable, resulta ms difcil para un atacante
insertar un comando en la instruccin Transact-SQL del procedimiento y
comprometer la seguridad.

Los procedimientos pueden cifrarse, lo que ayuda a ofuscar el cdigo fuente. Para
obtener ms informacin, vea Cifrado de SQL Server.

Reutilizacin del cdigo

El cdigo de cualquier operacin de base de datos redundante resulta un candidato


perfecto para la encapsulacin de procedimientos. De este modo, se elimina la
necesidad de escribir de nuevo el mismo cdigo, se reducen las inconsistencias de
cdigo y se permite que cualquier usuario o aplicacin que cuente con los permisos
necesarios pueda acceder al cdigo y ejecutarlo.

Mantenimiento ms sencillo

Cuando las aplicaciones cliente llaman a procedimientos y mantienen las


operaciones de base de datos en la capa de datos, solo deben actualizarse los
cambios de los procesos en la base de datos subyacente. El nivel de aplicacin
permanece independiente y no tiene que tener conocimiento sobre los cambios
realizados en los diseos, las relaciones o los procesos de la base de datos.

Rendimiento mejorado

De forma predeterminada, un procedimiento se compila la primera vez que se


ejecuta y crea un plan de ejecucin que vuelve a usarse en posteriores
ejecuciones. Como el procesador de consultas no tiene que crear un nuevo plan,
normalmente necesita menos tiempo para procesar el procedimiento.

Si ha habido cambios importantes en las tablas o datos a los que se hace


referencia en el procedimiento, el plan pre compilado podra hacer que el
procedimiento se ejecutara con mayor lentitud. En este caso, volver a crear el
procedimiento y forzar un nuevo plan de ejecucin puede mejorar el rendimiento.

TECNOLOGA DE LA PROGRAMACIN II I 7
Procedimientos Almacenados - UNT

DESVENTAJAS

Las aplicaciones que involucran la lgica de negocio y elaboracin extensa podra


suponer una carga excesiva en el servidor si la lgica se implement en su
totalidad en los procedimientos almacenados. Ejemplos de este tipo de tratamiento
incluyen las transferencias de datos, recorrido de datos, transformaciones de datos
y operaciones intensivas de cmputo. Usted debe mover este tipo de
procesamiento de procesos de negocio o de los componentes lgicos de acceso a
datos, que son un recurso ms escalable que el servidor de base de datos.

No ponga toda la lgica de negocio en los procedimientos almacenados. El


mantenimiento y la agilidad de su aplicacin se convierte en un problema cuando
se debe modificar la lgica de negocio en T-SQL. Por ejemplo, aplicaciones de ISV
que apoyan mltiples RDBMS no es necesario para mantener separados los
procedimientos almacenados para cada sistema.

La escritura y el mantenimiento de los procedimientos almacenados es ms a


menudo en una tarea especializada establece que no todos los desarrolladores
poseen. Esta situacin puede introducir cuellos de botella en el programa de
desarrollo del proyecto.

TECNOLOGA DE LA PROGRAMACIN II I 8
Procedimientos Almacenados - UNT

SINTAXIS

Create Procedure

CREATE PROCEDURE sp_name ([parameter[,...]])


[characteristic ...] routine_body

Estos comandos crean una rutina almacenada. Por defecto, la rutina se asocia con la base
de datos actual. Para asociar la rutina explcitamente con una base de datos, especifique el
nombre como db_name.sp_name al crearlo.
La lista de parmetros entre parntesis debe estar siempre presente. Si no hay parmetros,
se debe usar una lista de parmetros vaca ( ).
Cada parmetro es un parmetro IN por defecto. Para especificar otro tipo de parmetro,
use la palabra clave OUT o INOUT antes del nombre del parmetro. Especificando IN, OUT,
o INOUT slo es vlido para una PROCEDURE.
routine_body: procedimientos almacenados o comandos SQL vlidos.

La Sentencia CALL

CALL sp_name([parameter[,...]])

El comando CALL invoca un procedimiento definido previamente con CREATE


PROCEDURE.
CALL puede pasar valores al llamador usando parmetros declarados como OUT o INOUT.

La Sentencia Compuesta BEGINEND

[begin_label:] BEGIN
[statement_list]
END [end_label]

Los procedimientos almacenados pueden contener varios comandos, usando un comando


compuesto
BEGIN ... END .

Sentencia DECLARE

El comando DECLARE se usa para definir varios iconos locales de una rutina: las variables
locales, condiciones y handlers y cursores.
DECLARE puede usarse slo dentro de comandos compuestos BEGIN ... END y deben ser
su inicio, antes de cualquier otro comando.

TECNOLOGA DE LA PROGRAMACIN II I 9
Procedimientos Almacenados - UNT

VARIABLES EN PROCEDIMIENTOS ALMACENADOS


Declarar variables locales con DECLARE

DECLARE var_name[,...] type [DEFAULT value]

Este comando se usa para declarar variables locales. Para proporcionar


un valor por defecto para la variable, incluya una clusula DEFAULT . El
valor puede especificarse como expresin, no necesita ser una constante.
Si la clusula DEFAULT no est presente, el valor inicial es NULL.
La visibilidad de una variable local es dentro del bloque BEGIN ... END
donde est declarado.
Puede usarse en bloques anidados excepto aqullos que declaren una
variable con el mismo nombre.

Sentencia SET para variables

SET var_name = expr [, var_name = expr] ...

El comando SET en procedimientos almacenados es una versin


extendida del comando general SET.
Las variables referenciadas pueden ser las declaradas dentro de una
rutina, o variables de servidor globales.
El comando SET en procedimientos almacenados se implementa como
parte de la sintaxis SET preexistente.

La sentencia SELECT ... INTO

SELECT col_name[,...] INTO var_name[,...] table_expr

Esta sintaxis SELECT almacena columnas seleccionadas directamente en


variables. Por lo tanto, slo un registro puede retornarse.

Conditions and Handlers

Ciertas condiciones pueden requerir un tratamiento especfico. Estas


condiciones pueden estar
relacionadas con errores, as como control de flujo general dentro de una
rutina.

Condiciones DECLARE

DECLARE condition_name CONDITION FOR condition_value


condition_value:
SQLSTATE [VALUE] sqlstate_value
| mysql_error_code

Este comando especifica condiciones que necesitan tratamiento


especfico. Asocia un nombre con una condicin de error especfica. El
nombre puede usarse subsecuentemente en un comando DECLARE
HANDLER .

TECNOLOGA DE LA PROGRAMACIN II I 10
Procedimientos Almacenados - UNT

DECLARE handlers

DECLARE handler_type HANDLER FOR condition_value[,...]


sp_statement
handler_type:
CONTINUE
| EXIT
| UNDO

condition_value:
SQLSTATE [VALUE] sqlstate_value
| condition_name
| SQLWARNING
| NOT FOUND
| SQLEXCEPTION
| mysql_error_code

Este comando especifica handlers que pueden tratar una o varias


condiciones. Si una de estas
condiciones ocurren, el comando especificado se ejecuta.
Para un handler CONTINUE , contina la rutina actual tras la ejecucin
del comando del handler.
Para un handler EXIT , termina la ejecucin del comando compuesto
BEGIN...END actual. El
handler de tipo UNDO todava no se soporta.

SQLWARNING es una abreviacin para todos los cdigos SQLSTATE


que comienzan con 01.

NOT FOUND es una abreviacin para todos los cdigos SQLSTATE


que comienzan con 02.

SQLEXCEPTION es una abreviacin para todos los cdigos


SQLSTATE no tratados por

SQLWARNING o NOT FOUND.

Cursores
Se soportan cursores simples dentro de procedimientos y funciones
almacenadas. La sintaxis es la de SQL empotrado.

Declarar cursores
DECLARE cursor_name CURSOR FOR select_statement
Este comando declara un cursor. Pueden definirse varios cursores en una
rutina, pero cada cursor en un bloque debe tener un nombre nico.
El comando SELECT no puede tener una clusula INTO.

Sentencia OPEN del cursor


OPEN cursor_name
Este comando abre un cursor declarado prviamente.

TECNOLOGA DE LA PROGRAMACIN II I 11
Procedimientos Almacenados - UNT

Sentencia de cursor FETCH


FETCH cursor_name INTO var_name [, var_name] ...
Este comando trata el siguiente registro (si existe) usando el cursor abierto
especificado, y avanza el puntero del cursor.

Sentencia de cursor CLOSE


CLOSE cursor_name
Este comando cierra un cursor abierto previamente.
Si no se cierra explcitamente, un cursor se cierra al final del comando
compuesto en que se declara.

CONSTRUCTORES DE CONTROL DE FLUJO

Los constructores IF, CASE, LOOP, WHILE, ITERATE, y LEAVE estn


completamente implementados.
Estos constructores pueden contener un comando simple, o un bloque de
comandos usando el
comando compuesto BEGIN ... END. Los constructores pueden estar
anidados.
Los bucles FOR no estn soportados.

Sentencia IF

IF search_condition THEN statement_list


[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF

IF implementa un constructor condicional bsico. Si search_condition


se evala a cierto, el comando
SQL correspondiente listado se ejectua. Si no coincide ninguna
search_condition se ejecuta el
comando listado en la clusula ELSE. statement_list puede consistir en
varios comandos.
Tenga en cuenta que tambin hay una funcin IF(), que difiere del
commando IF descrito aqu.

TECNOLOGA DE LA PROGRAMACIN II I 12
Procedimientos Almacenados - UNT

La sentencia CASE

CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
O:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE

El comando CASE para procedimientos almacenados implementa un


constructor condicional complejo.
Si una search_condition se evala a cierto, el comando SQL
correspondiente se ejecuta. Si no
coincide ninguna condicin de bsqueda, el comando en la clusula
ELSE se ejecuta.

Sentencia LOOP

[begin_label:] LOOP
statement_list
END LOOP [end_label]

LOOP implementa un constructor de bucle simple que permite


ejecucin repetida de comandos particulares. El comando dentro del
bucle se repite hasta que acaba el bucle, usualmente con un comando
LEAVE .
Un comando LOOP puede etiquetarse. end_label no puede darse
hasta que est presente begin_label , y si ambos lo estn, deben ser
el mismo.

Sentencia LEAVE

LEAVE label

Este comando se usa para abandonar cualquier control de flujo


etiquetado. Puede usarse con
BEGIN ... END o bucles.

TECNOLOGA DE LA PROGRAMACIN II I 13
Procedimientos Almacenados - UNT

La sentencia ITERATE

ITERATE label

ITERATE slo puede aparecer en comandos LOOP, REPEAT, y


WHILE . ITERATE significa "vuelve a hacer el bucle." Por ejemplo:

CREATE PROCEDURE doiterate(p1 INT)


BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
SET @x = p1;
END

Sentencia REPEAT

[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]

El comando/s dentro de un comando REPEAT se repite hasta que la


condicin search_condition es cierta.
Un comando REPEAT puede etiquetarse. end_label no puede darse a
no ser que begin_label est presente, y si lo estn, deben ser el
mismo.

Sentencia WHILE

[begin_label:] WHILE search_condition DO


statement_list
END WHILE [end_label]

El comado/s dentro de un comando WHILE se repite mientras la


condicin search_condition es
cierta. Un comando WHILE puede etiquetarse. end_label no puede
darse a no ser que begin_label tambin est presente, y si lo estn,
deben ser el mismo.
Por ejemplo:

CREATE PROCEDURE dowhile()


BEGIN
DECLARE v1 INT DEFAULT 5;
WHILE v1 > 0 DO
...
SET v1 = v1 1;
END WHILE;
END

TECNOLOGA DE LA PROGRAMACIN II I 14
Procedimientos Almacenados - UNT

EJEMPLOS

TECNOLOGA DE LA PROGRAMACIN II I 15
Procedimientos Almacenados - UNT

TECNOLOGA DE LA PROGRAMACIN II I 16
Procedimientos Almacenados - UNT

TECNOLOGA DE LA PROGRAMACIN II I 17
Procedimientos Almacenados - UNT

BIBLIOGRAFA
https://www.youtube.com/watch?v=siyGNSrh1Qw
https://es.wikipedia.org/wiki/Procedimiento_almacenado
http://www.hermosaprogramacion.com/2014/06/mysql-procedure-show-
create/
https://www.codejobs.biz/es/blog/2014/07/09/como-hacer-un-
procedimiento-almacenado-en-mysql-sin-morir-en-el-intento
http://enreas.wikia.com/wiki/Gu%C3%ADa_Pr%C3%A1ctica_MySQL_5.1/Cap
%C3%ADtulo_11:_Procedimientos_almacenados

TECNOLOGA DE LA PROGRAMACIN II I 18

También podría gustarte