Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Luis Reyes
datos propietario, es decir, cada gestor de base de datos posee su propio lenguaje, por lo que es recomendable revisar el manual del SGBD para conocer la sintaxis.
...Procedimientos Almacenados
Una vez creado un procedimiento almacenado, se
puede invocar directamente desde una aplicacin, o sustituir el nombre de una tabla o vista, por el nombre de procedimiento en clusulas SELECT.
Los procedimientos almacenados pueden recibir
...Procedimientos Almacenados Como se puede apreciar los Sistemas de Bases de Datos ofrecen a desarrolladores, administradores y usuarios una gama muy completa de herramientas que permiten garantizar la integridad, consistencia, confidencialidad y en general seguridad de la informacin almacenada y con un elemento muy importante a favor:
Las lneas de cdigo que se requieren por parte del
implementador son muy pocas, en ocasiones solo basta con una sencilla sentencia para obligar al DBMS a controlar y mantener las restricciones necesarias
DBD2 Ing. Luis Reyes
forma interactiva Reducen el trfico a travs de la red Pueden capturar errores antes que ellos puedan entrar a la base de datos Establece consistencia porque ejecuta las tareas de la misma forma Permite el desarrollo modular de aplicaciones Ayuda a proveer seguridad Puede forzar reglas y defaults complejos de los negocios
DBD2 Ing. Luis Reyes
*Ventajas
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 solo necesita enviar sus
resultados de regreso al usuario, deshacindose de la sobrecarga resultante de comunicar grandes cantidades de datos salientes y entrantes.
DBD2 Ing. Luis Reyes
*Rendimiento
Al ser ejecutados por el motor de base de datos ofrecen un Rendimiento inmejorable ya que no es necesario transportar datos a ninguna parte.
Cualquier proceso externo tiene una penalidad de tiempo adicional dada por el transporte de datos. Los procedimientos almacenados son analizados y optimizados en el momento de su creacin Ya se han resuelto las referencias a los objetos referenciados en el procedimiento almacenado
DBD2 Ing. Luis Reyes
*Centralizacin
Al formar parte de la base de datos los procedimientos
almacenados estn en un lugar centralizado y pueden ser ejecutados por cualquier aplicacin que tenga acceso a la misma. aplicacin, es posible que no est disponible en todos los lugares que se lo necesite, por ejemplo, el sistema operativo unix. procedimientos almacenados estn siempre disponibles.
DBD2 Ing. Luis Reyes
Los
SQL Server para ampliar SQL con los elementos caractersticos de los lenguajes de programacin: variables, sentencias de control de flujo, bucles, etc. Microsoft SQL Server.
La implementacin de Transact-SQL funciona en los productos En tanto, Sybase utiliza el lenguaje en su Adaptative Server
*Seguridad
Los procedimientos almacenados facilitan algunas tareas de administracin de seguridad y asignacin de permisos.
Por ejemplo:
Se puede conceder permiso a un usuario para ejecutar un
determinado procedimiento almacenado, aunque el usuario no disponga de los permisos necesarios sobre los objetos afectados por las acciones individuales de dicho procedimiento.
DBD2 Ing. Luis Reyes
*Encapsulacin
Los procedimientos almacenados encapsulan gran parte de la lgica de los datos a las aplicaciones que los utilizan.
Por ejemplo:
Una
aplicacin puede llamar al procedimiento almacenado spEliminarProveedor sin conocer cmo funciona internamente ste proceso (transacciones e instrucciones Transact-SQL utilizadas, tablas afectadas, etc.)
DBD2 Ing. Luis Reyes
*Desventaja importante
Esclavitud:
Los procedimientos almacenados nos esclavizan al
motor de base de datos. Una base de datos con muchos procedimientos almacenados es prcticamente imposible de migrar a otro motor.
Lo anterior se debe, principalmente, a que los lenguajes de procedimientos almacenados de distintos fabricantes no son compatibles entre s.
DBD2 Ing. Luis Reyes
Conclusin
Teniendo en cuenta las ventajas y desventajas es
aconsejable no abusar de los procedimientos almacenados y utilizarlos slo cuando no queda otra alternativa.
CREACION
CREATE PROCEDURE sp_name ([parametros[,...]]) [caracteristicas ...] cuerpodelarutina
Ejemplo
Para MySQL, sera de la siguiente manera:
create procedure proc_update_titles begin
update titles set price = price * $0.95 where total_sales < 3000
end
Ejemplo
Si fuera para SQL*Server, entonces se deber escribir de la siguiente forma:
create proc proc_update_titles as update titles set price = price * $0.95 where total_sales < 3000 return
Esto significa que habra que investigar segn
ELIMINACION
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name No es difcil deducir cual es la utilidad de esta instruccin, esta sentencia tiene como finalidad el eliminar el procedimiento almacenado el cual se le pasa como parmetro.
Ejemplo
En el caso de MySQL, esta sera la forma de borrar un procedimiento:
SEGMENTO DE CODIGO
BEGIN [statement_list] END
La utilizacin de estas dos instrucciones en conjunto dan lugar al cuerpo del procedimiento, donde se almacenan la o las diferentes instrucciones que componen a esta rutina
CREACION DE VARIABLES
DECLARE var_name[,...] type [DEFAULT value]
Esta sentencia se utiliza para la declaracin de variables dentro del procedimiento almacenado,
Esta instruccin puede usarse dentro de las etiquetas begin y end las cuales engloban el
cuerpo de instrucciones del procedimiento, tambin es posible asignar un tipo de variable y un valor default.
INSTRUCCIN SELECT
SELECT col_name[,...] INTO var_name[,...] table_expr
Esta sentencia es especialmente til ya que inserta en las variables que se le indican los resultados del SELECT, es importante tener en cuenta que no almacena una estructura bidimensional, si no solamente una o varias variables, es por ello que es necesario que las consultas solamente tengan un solo registro como el ejemplo siguiente. SELECT id, data INTO x, y FROM test.t1 LIMIT 1;
DBD2 Ing. Luis Reyes
SENTENCIA IF
IF condition THEN Sentencias1 ELSE Sentencias2 END IF
IF implementa un constructor condicional bsico. Si condition se evala a cierto, el comando SQL
correspondiente sentencias1 se ejecuta. Si no coincide ninguna condicin se ejecuta el comando listado en la clusula ELSE. Sentencias2 puede consistir en varios comandos.
SENTENCIA CASE
CASE condition THEN ELSE END CASE
El comando CASE para procedimientos almacenados implementa un constructor condicional complejo. Si una 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.
DBD2 Ing. Luis Reyes
SENTENCIA WHILE
WHILE condition DO sentencias END WHILE
Los DBMS soportan varios tipo de bucles y con ellos muchos tipos de control sobre ellos. Los comandos dentro del WHILE se repiten mientras la condicin condition es cierta.
DBD2 Ing. Luis Reyes
Ejemplo
CREATE PROCEDURE procedure1 (IN parameter1 INTEGER) BEGIN DECLARE variable1 CHAR(10); IF parameter1 = 17 THEN SET variable1 = 'birds'; ELSE SET variable1 = 'beasts'; END IF; INSERT INTO table1 VALUES (variable1); END;
Este procedimiento recibe un dato por el parmetro parameter1, si el valor es 17 entonces asigna a la variable variable1 el valor bird sino ser el valor beasts, luego lo agrega en la tabla1 DBD2 Ing. Luis Reyes
Ejemplo
delimiter // CREATE procedure introducePersona(IN edad int, IN nombre varchar(50)) begin IF edad < 18 then INSERT INTO ninos VALUES(edad,nombre); else INSERT INTO adultos VALUES(edad,nombre); end IF; end; //
Nota: la lnea que dice delimiter // permitir reemplazar momentneamente el ; que normalmente se usa como fin de instruccin
Evala el parmetro edad, si el valor es menor a 18 entonces agrega a la tabla ninos los valores de los parmetros edad y nombre, sino agregar esos datos pero en la tabla adultos DBD2 Ing. Luis Reyes
Ejemplo
DELIMITER //
Nota: el smbolo @ a la izquierda de la variable es equivalente decir que es una variable global pblica como es conocida en otros lenguajes.
CREATE PROCEDURE ejemplo (num INTEGER) BEGIN INSERT INTO tabla1 VALUES(NULL, num+num, num*num);
# retorna el ltimo valor generado automticamente que se insert # en una columna AUTO_INCREMENT. SET @ultimo := LAST_INSERT_ID();
INSERT INTO tabla2 VALUES (@ultimo, @ultimo+@ultimo, @ultimo*@ultimo);
END //
DELIMITER ;
Se agrega a la tabla tabla1 el valor nulo, la suma del parmetro num y el producto del mismo parmetro, posteriormente hacemos lo mismo pero con el valor del campo auto incrementado. DBD2 Ing. Luis Reyes
Ejemplo usando:
IF .. THEN .. ELSE
delimiter // CREATE procedure miProc(IN p1 int) begin declare miVar int; SET miVar = p1 +1 ; IF miVar = 12 then INSERT INTO lista VALUES(55555); else INSERT INTO lista VALUES(7665); end IF; end; //
DBD2 Ing. Luis Reyes
/ Case
end; //
de REPEAT
declare v int; SET v = 20; repeat INSERT INTO lista VALUES(v); SET v = v + 1; Nota: en este caso, la instruccin until v <= 1 INSERT se hace por lo menos 1 vez. end repeat;
end; //
LABEL
En este caso usamos la instruccin LOOP, pero en este caso se le ha asignado un nombre de etiqueta
INSERT INTO lista VALUES (v); SET v = v + 1; IF v <= 5 then Si la condicin se cumple, entonces el lazo se interrumpe leave loop_label; end IF;
INVOCAR PROCEDIMIENTOS
CALL sp_name([parameter[,...]])
El comando
Ejecutar procedimientos
Para MySQL la llamada a un procedimiento sera: Call proc_update_title
Si estuviera en SQL*Server, sera execute proc_update_titles