viernes, 20 de noviembre de 2009

PROCEDIMIENTOS ALMACANADOS (MySQL)

Un procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) el cual es almacenado físicamente en una base de datos. Su implementación varía de un manejador de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición 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 sólo necesita enviar sus resultados de regreso al usuario, deshaciéndose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
.
Create provcedure (crear procedimiento).
La instrucción create procedure sirve para la creación de un procedimiento almacenado, en el siguiente ejemplo se puede observar la estructura general de un procedimiento almacenado.

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

[caracteristicas ...] cuerpodelarutina
[NOT] DETERMINISTIC
{ CONTAINS SQL NO SQL READS SQL DATA MODIFIES SQL DATA }
{ DEFINER INVOKER }
COMENTARIO 'string'

Donde:

Parámetros:

• IN* : indica que son parámetros de entrada
• OUT: parámetros de salida.
• INOUT parámetros de entrada y de salida
Características:
Características 1:
  • DETERMINISTIC: Se utiliza cuando los mismos parámetros de entrada tienen como resultado los mismos datos de salida.
  • NO DETERMINISTIC*:Es utilizada en los casos en los que los parámetros de entrada pueden tener diferentes parámetros de salida.
Características 2:
  • CONTAINS SQL*: El cuerpo del procedimiento cuenta con instrucciones SQL que pueden modificar datos y leerlos.
  • NO SQL:El cuerpo del procedimiento no cuenta con instrucciones SQL
  • READS SQL DATA: Las instrucciones SQL que conforman el procedimiento solamente leen datos
  • MODIFIES SQL DATA:Las instrucciones que contiene el procedimiento solamente modifican los datos.
Características 3: SQL SECURITY
  • DEFINER*:Esta opción indica que el procedimiento almacenado se ejecutará con los privilegios del usuario quien lo definió, no quien lo está invocando.
  • INVOKER: Al contrario de la opción anterior esta le hace saber al DBMS que el procedimiento se ejecutará con los permisos de quien está invocando el procedimiento.
Estos valores son los que el procedimiento almacenado tomará en el caso de que el usuario no le haga saber que requiere otros.
  • COMMENT: es un espacio reservado en el procedimiento para la posible colocación de algún comentario, estos comentarios son visibles mediante el comando SHOW CREATE PROCEDURE

  • CUERPODELARUTINA: En esta parte del procedimiento es donde se almacena las diferentes instrucciones de control y SQL que forman el cuerpo del procedimiento.

Alter procedure.

ALTER {PROCEDURE FUNCTION} sp_name [caracteristicas..]
caracteristicas:
{ CONTAINS SQL NO SQL READS SQL DATA MODIFIES SQL DATA }
SQL SECURITY { DEFINER INVOKER }
COMMENT 'string'

Esta instrucción es útil en el momento de realizar alguna modificación en el procedimiento, especialmente si la modificación se realiza desde la consola, aunque en que la mayoría de las aplicaciones administrativas del DBMS primero eliminan el procedimiento con la instrucción drop y posteriomente lo vuelven a crear, es lógico y acertado pensar que para la utilización de esta rutina es necesario tener el privilegio de alter rutine, como se observa en el ejemplo los parámetros iniciales son los mismos que en la instrucción create procedure.

Drop procedure.


DROP {PROCEDURE FUNCTION} [IF EXISTS] sp_name

No es difícil deducir cual es la utilidad de esta instrucción, esta sentencia tiene como finalidad el eliminar el procedimiento almacenado el cual se le pasa como parámetro.

ejemplo de un procedimiento almacanado


CREATE PROCEDURE sp_name ([parameter[,...]])
[characteristic ...] routine_body
CREATE FUNCTION sp_name ([parameter[,...]])
RETURNS type
[characteristic ...] routine_body
parameter:
[ IN OUT INOUT ] param_name type
type:
Any valid MySQL data type
characteristic:
LANGUAGE SQL
[NOT] DETERMINISTIC
{ CONTAINS SQL NO SQL READS SQL DATA MODIFIES SQL DATA }
SQL SECURITY { DEFINER INVOKER }
COMMENT 'string'
routine_body:
procedimientos almacenados o comandos SQL válidos


No hay comentarios:

Publicar un comentario