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
- 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.
- 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.
- 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.
- 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
[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