Sunteți pe pagina 1din 4

AdministraciondeBasesdeDatos.

Introduccin.Definiciones
Esteobraestbajounalicencia:CreativeCommonsReconocimientoCompartirIgual3.0

Vuelta a Unidad 04. Guiones de MySQL. Indice General de la Asignatura. Vuelta al


IndiceGeneraldeApuntes
.
ut0402.ProcedimientosyFuncionesenMySQL.
.
Los procedimientos almacenados tambin llamados rutinas se crean con comandos
CREATEPROCEDUREyCREATEFUNCTION.
Unarutinaesunprocedimientoounafuncin.
Lasrutinasalmacenadaspuedenllamarotrasrutinasalmacenadas.
Un procedimiento se invoca usando un comando CALL , y slo puede pasar valores
usandovariablesdesalida.
Unafuncinpuedellamarsedesdedentrodeuncomandocomocualquierotrafuncin
(estoes,invocandoelnombredelafuncin),ypuederetornarunvalorescalar.
Los procedimientos almacenadoso funciones se asocian con una base de datos. Esto
tienevariasimplicaciones:
Cunado se invoca la rutina, se realiza implcitamente USE db_name ( y se
deshacecuandoacabalarutina).
Puede invocar una rutina precedido del nombre de la base de datos. Ejemplo :
basedatos.rutina
Esto puede usarse para referirse a una rutina que no est en la base de
datos actual. Por ejemplo, para invocar procedimientos almacenados p o
funciones f esto se asocia con la base de datos test , puede decir CALL
test.p()otest.f().
Cuando se borra una base de datos, todos los procedimientos almacenados
asociadosconellatambinseborran.
CREATEPROCEDUREyCREATEFUNCTION
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 vlidos

Pordefecto,larutinaseasociaconlabasededatosactual.
Paraasociarlarutinaexplcitamenteconunabasededatos,especifiqueel
nombrecomodb_name.sp_namealcrearlo.
La clusula RETURNS puede especificarse slo con FUNCTION, donde es
obligatorio.Seusaparaindicareltipoderetornodelafuncin,yelcuerpodela
funcindebeconteneruncomandoRETURNvalue.
Lalistadeparmetrosentreparntesisdebeestarsiemprepresente.
Sinohayparmetros,sedebeusarunalistadeparmetrosvaca().
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.
INOUTsloesvalidoparaunaPROCEDURE?.....
Un procedimiento o funcin se considera determinista si siempre produce el
mismo resultado para los mismos parmetros de entrada, y no determinista en
cualquierotrocaso.SinosedaniDETERMINISTICniNOTDETERMINISTICpor
defectoesNOTDETERMINISTIC.
Varias caractersticas proporcionan informacin sobre la naturaleza de los datos
usadosporlarutina.CONTAINSSQLindicaquelarutinanocontienecomandos
que leen o escriben datos. NO SQL indica que la rutina no contiene comandos
SQL.READSSQLDATAindicaquelarutinacontienecomandosqueleendatos,
peronocomandosqueescribendatos.MODIFIESSQLDATAindicaquelarutina
contiene comandos que pueden escribir datos. CONTAINS SQL es el valor por
defectosinosedanexplcitamenteningunadeestascaractersticas.
LacaractersticaSQLSECURITYpuedeusarseparaespecificarsilarutinadebe
serejecutadausandolospermisosdelusuarioquecrealarutinaoelusuarioque
la invoca. El valor por defecto es DEFINER. Esta caracterstica es nueva en
SQL:2003.Elcreadoroelinvocadordebentenerpermisosparaaccederalabase
de datos con la que la rutina est asociada. Desde MySQL 5.0.3, es necesario
tener el permiso EXECUTE para ser capaz de ejecutar la rutina. El usuario que
debe tener este permiso es el definidor o el invocador, en funcin de cmo la
caractersticaSQLSECURITY.
La clusula COMMENT es una extensin de MySQL, y puede usarse para
describirelprocedimientoalmacenado.
Esta informacin se muestra con los comandos SHOW CREATE
PROCEDUREySHOWCREATEFUNCTION.
Importante:
Elcomandodelimiterparacambiareldelimitadordelcomandodea otro
mientrassedefineelprocedimiento.
Esto permite pasar el delimitador usado en el cuerpo del procedimiento a
travsdelservidorenlugardeserinterpretadoporelmismomysql.
Ejemplosderutinas:
Ejemplosdedeclaracindefuncionesyprocedimientos
mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> SET @a=0; //Declaramos la variable de SESION @a.
mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

.
.

mysql> SELECT @a;


+------+
| @a |
+------+
|3
|
+------+
1 row in set (0.00 sec)
mysql> delimiter //
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> RETURN CONCAT('Hello, ',s,'!');
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world! |
+----------------+
1 row in set (0.00 sec)

#Creacin de una rutina de prueba de la funcion esimpar(n)


DELIMITER $$
DROP FUNCTION esimpar $$
CREATE FUNCTION esimpar(numero INT)
RETURNS INT
BEGIN
DECLARE impar INT;
IF MOD(numero,2) = 0 THEN
SET impar=0;
ELSE
SET impar=1;
END IF;
RETURN(impar);
END;
$$
DELIMITER ; $$
;
SELECT esimpar(87);
SELECT esimpar(78);

Ejercicio040201:Pruebayverificalasrutinas.
.
.
ALTERPROCEDUREyALTERFUNCTION
Seusaparamodificaciones
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

DROPPROCEDUREyDROPFUNCTION
Seusaparaborrados
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

SHOWCREATEPROCEDUREySHOWCREATEFUNCTION
Este comando es una extensin de MySQL . Similar a SHOW CREATE TABLE,
retornalacadenaexactaquepuedeusarsepararecrearlarutinanombrada.

SHOW CREATE {PROCEDURE | FUNCTION} sp_name

Ejercicio040202:MuestralasrutinasconSHOWCREATE.
.

S-ar putea să vă placă și