Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Unidad 1 SMBD Y SQL AVANZADO
Unidad 1 SMBD Y SQL AVANZADO
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
2
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
3
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
La sintaxis para la creación de rutinas difiere algo para los procedimientos y funciones:
4
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
EJEMPLOS:
-- procedimientos y funciones
USE plannude;
RETURNS FLOAT
CALL rect_area(5,5);
5
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
-- Sentencias compuestas
use plannude;
delimiter //
CREATE PROCEDURE world_record_count ()
BEGIN
SELECT 'Cooperativas', COUNT(*) FROM cooperativa;
SELECT 'Datos_nude', COUNT(*) FROM dato_nude;
SELECT 'Detalle_obra', COUNT(*) FROM detalle_obra;
END;
//
delimiter ;
-- Sentencias Compuestas
delimiter //
CREATE PROCEDURE bloque()
BEGIN
inner_block: BEGIN
IF DAYNAME(NOW()) = 'Wednesday' THEN
LEAVE inner_block;
END IF;
SELECT 'Hoy no es Wednesday';
END inner_block;
select dayname(now());
END;
//
delimiter ;
CALL bloque();
6
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
-- Declaración de Parámetros
use plannude;
-- Declaración de Parametros
use plannude;
drop procedure param_test;
delimiter //
CREATE PROCEDURE param_test (IN p_in INT, OUT p_out INT, INOUT p_inout
INT)
BEGIN
SELECT p_in, p_out, p_inout;
SET p_in = 100, p_out = 200, p_inout = 300;
END;
//
delimiter ;
CALL param_test(100,200,300);
7
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
use plannude;
drop procedure variables;
delimiter //
CALL variables();
8
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
Cursores
Un cursor permite acceder un resultado (result set), una fila (registro) a la vez. Debido a
su orientación en filas, los cursores a menudo son utilizados en ciclos (loops) que
localizan y procesan una fila dentro de cada iteración del ciclo.
Para usar un cursor en una rutina almacenada, se debe escribir la sentencia DECLARE
CURSOR que nombra el cursor y asociarlo con una sentencia SELECT que produce un
resultado (result set):
Para abrir el cursor, coloque su nombre en una sentencia OPEN. Esto ejecuta la
sentencia SELECT asociada con el cursor:
OPEN cursor_name
La extracción ocurre a menudo en un bucle con el propósito de que todos los registros
en el resultado pueden ser procesados. Eso plantea un asunto: ¿qué ocurre cuando usted
llega al final del resultado? La respuesta es que una condición de No Data ocurre
(SQLSTATE 02000), que se puede detectar declarando a un manejador para esa
condición. Por ejemplo:
Cuando termine de utilizar un cursor, cierre este con una sentencia CLOSE:
CLOSE cursor_name
9
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
El siguiente ejemplo muestra cómo usar cada una de las sentencias relacionadas con
cursores anteriormente discutidas. El ejemplo declara un cursor llamado c y lo relaciona
con una sentencia que selecciona registros para países africanos en la tabla País.
También declara un manejador de condición que detecta el final del resultado. (La
declaración del manejador está vacía porque el único propósito para el manejador es
transferir el control hasta el final del cuerpo de su bloque.)
-- cursores
use plannude;
delimiter //
OPEN c;
BEGIN
DECLARE EXIT HANDLER FOR SQLSTATE '02000' BEGIN END;
LOOP
FETCH c INTO code_var, name_var;
SET row_count = row_count + 1;
END LOOP;
END;
CLOSE c;
END;
//
delimiter ;
CALL p8();
El ejemplo anterior usa un bloque anidado debido a que un manejador EXIT termina el
bloque dentro el cual este es declarado, ni el loop dentro el cual la condición ocurre. Si
no ha sido utilizado el bloque anidado, el manejador transferirá el control al final del
bloque principal una vez leído el final del resultado (result set), y las sentencias CLOSE
y SELECT siguientes al ciclo nunca se ejecutara. El siguiente ejemplo muestra una
forma de hacerlo:
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
-- cursores
BEGIN
DECLARE exit_flag INT DEFAULT 0;
DECLARE row_count INT DEFAULT 0;
DECLARE code_var CHAR(3);
DECLARE name_var CHAR(52);
OPEN c;
fetch_loop: LOOP
FETCH c INTO code_var, name_var;
IF exit_flag THEN LEAVE fetch_loop; END IF;
SET row_count = row_count + 1;
END LOOP;
CLOSE c;
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
use plannude;
drop procedure p10;
delimiter //
create procedure p10()
BEGIN
DECLARE val INT;
IF val IS NULL
THEN SELECT 'val is NULL';
ELSE SELECT 'val is not NULL';
END IF;
CASE val
WHEN 0 THEN SELECT 'val is 0';
WHEN 1 THEN SELECT 'val is 1';
ELSE SELECT 'val is not 0 or 1';
END CASE;
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
CASE
WHEN val IS NULL THEN SELECT 'val is NULL';
WHEN val < 0 THEN SELECT 'val is less than 0';
WHEN val > 0 THEN SELECT 'val is greater than 0';
ELSE SELECT 'val is 0';
END CASE;
END;
//
delimiter ;
CALL p10();
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
use plannude;
drop procedure p11;
delimiter //
create procedure p11()
BEGIN
DECLARE i INT DEFAULT 0;
my_loop: LOOP
SET i = i + 1;
IF i >= 10 THEN
LEAVE my_loop;
END IF;
END LOOP my_loop;
------------------------------------------------------------------------
--REPEAT
-- statement_list
--UNTIL expr
--END REPEAT
------------------------------------------------------------------------
REPEAT
SET i = i + 1;
UNTIL i >= 10
END REPEAT;
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
------------------------------------------------------------------------
--WHILE expr DO
-- statement_list
--END WHILE
------------------------------------------------------------------------
WHILE i < 10 DO
SET i = i + 1;
END WHILE;
------------------------------------------------------------------------
-- Transferencias de Control
-- LEAVE label
-- ITERATE label
------------------------------------------------------------------------
SET i = 0;
my_loop: LOOP
SET i = i + 1;
IF i < 10 THEN ITERATE my_loop;
ELSEIF i > 20 THEN LEAVE my_loop;
END IF;
SELECT 'i is between 10 and 20';
END LOOP my_loop;
END;
//
delimiter ;
CALL p11();
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
Esquemas
Instancias y esquemas
Las bases de datos cambian en el tiempo cuando la información es insertada y
eliminada. A la información recolectada almacenada en la base de datos en un momento
particular se le llama instancia de la base de datos. Al diseño total de la base de datos se
le llama esquema de la base de datos. Los esquemas son cambiados infrecuentemente.
El concepto de esquema de base de datos y sus instancias pueden ser comprendidos por
analogía a la de un programa escrito en un lenguaje de programación. Un esquema de
base de datos corresponde a las declaraciones de variables (junto con su asociado tipo
de definición) en un programa. Cada variable tiene un valor particular en un instante
dado. Los valores de las variables en un programa en un punto en el tiempo
corresponden a una instancia de un esquema de la base de datos.
Los sistemas de bases de datos tienen varios esquemas, particionado acorde a niveles de
abstracción. El esquema físico describe el diseño de la base de datos en el nivel físico.
El esquema lógico describe el diseño de la base de datos en el nivel lógico. Una base de
datos puede tener varios esquemas a nivel de vista, algunas veces llamados sub-
esquemas, que describen diferentes vistas de la base de datos. De todos estos, el
esquema lógico es el más importante, en término de sus efectos en los programas de
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
El esquema físico esta oculto en beneficio del esquema lógico, y puede ser modificado
fácilmente sin afectar los programas de aplicación. Los programas de aplicación se
dicen que exhiben independencia física de datos si ellos no dependen del esquema
físico, y además no necesita reescribirlo si el esquema físico cambia.
Arquitectura cliente-servidor
Características principales de este tipo de arquitectura de cara a base de datos.
Por otro lado los clientes suelen ser estaciones de trabajo que solicitan varios servicios
al servidor.
Podemos decir que esta arquitectura necesita tres tipos de software para su correcto
funcionamiento:
o Software de gestión de datos: Este software se encarga de la manipulación y
gestión de los datos almacenados y requeridos por las diferentes aplicaciones.
Normalmente este software se aloja en el servidor.
o Software de desarrollo: este tipo de software se aloja en los clientes y solo en
aquellos que se dedique al desarrollo de aplicaciones.
1
Universidad Bolivariana de Venezuela
Dirección General Académica
PFG. Informática para la Gestión Social
Unidad Curricular: Bases de Datos II
Tema I
BIBLIOGRAFIA CONSULTADA:
MySQL 5 Certification Study Guide (2005)
Paul DuBois, Stefan Hinz, Carsten Pedersen
Sams Publishing
Tema1. Introducción.
Bases de datos y usuarios de bases de datos
Elmasri/Navathe 2002
Desarrollo Web
http://www.desarrolloweb.com/articulos/arquitectura-cliente-servidor.html