You are on page 1of 8

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

Manejo de Vistas, Variables, Flujos de Control, Procedimientos Almacenados y Funciones en


MySQL
1.- Vistas: Podemos definirlas como tablas virtuales que son creadas o generadas a partir
de las tablas de la base de datos y con el uso del T_SQL aunque los DBMS, tambin nos
dan la posibilidad de implementarlas mediante entornos grficos y con el uso de
asistentes. En realidad la implementacin de las vistas surge por la necesidad de contar
con estructuras que permitan visualizar los datos de una forma diferente a como estn
almacenadas en las tablas, las mismas que por razones de normalizacin tienen que ser
fraccionadas para mantener la integridad de los datos, pero cuando se quiere presentar la
informacin al usuario se deben juntar, para que este tenga una mejor apreciacin de la
informacin.
1.1. Sintaxis General:
Create View Nombre_Vista
As
Consulta del tipo Select

Podemos crear vistas a partir tambin de variar tablas. En el MySQL Query


Browser se ver de la siguiente manera:

Curso: Programacin III Carlos Gonzales Ramos

Pgina 1

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

1.2.- Ejemplos de Aplicacin: Usar la base de datos mybdventa

Implementar una vista que muestre los productos por tipo registrados en el
sistema.
Solucin:
create view
vproductos
as
select
p.nombre, p.descripcion, tp.tipo
from
producto p, tipo_producto tp
where
p.idtipo_producto=tp.idtipo_producto;

Implementar una vista que muestre los clientes registrados en el sistema,


de los cuales interesa conocer los datos personales, fecha de nacimiento,
lugar de procedencia y su ocupacin. Ordenar dicho registro por orden
alfabtico.

Implementar una vista que permita mostrar los productos que se


encuentran registrados en almacn, de los cuales me interesa conocer
nombre del producto, cdigo de producto, precio de venta, precio con
descuento y as como la fecha con que se registr dicho producto.

Implementar una vista que muestre las ventas del da y el empleado por
que realizado la venta. Ordenar dicho registro por nmero de venta.

Curso: Programacin III Carlos Gonzales Ramos

Pgina 2

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

2.- Variables: Son objetos que se usan dentro de un programa procedimiento o funcin
que sirven para almacenar valores y se caracterizan porque ese valor puede cambiar
durante la ejecucin del programa procedimiento o funcin. En MySQL para trabajar con
un variable se tiene que declarar y luego asignar valores.
2.1.- La sintaxis para declarar una variable es:
Declare Nombre de variable tipo de dato;
Ejemplo:
Declare Num int;
Para asignar un valor es:
Set Nombre de variable=valor;
Ejemplo:
Set Num=34;
Tambin se puede trabajar con variables libres; es decir que no necesitan
ser declaradas.
Ejemplo:
Set @num=27;
Select SUM(@num+21);
3.- Flujos de Control:
3.1.- CASE: Este flujo de control nos permite evaluar el resultado de un valor en
particular y dependiendo del valor que toma que sea mostrar un resultado.
CASE value WHEN [compare_value] THEN result [WHEN [compare_value]
THEN result ...] [ELSE result] END ;
Ejemplo:
Select CASE 2 WHEN 1 THEN 'one'
WHEN 2 THEN 'two' ELSE 'more' END;
Retorna ---------- two
SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
Retorna ----- true.

3.2.- IF: (condicin, Valorsiesverdadero, Valorsiesfalso).- Este flujo de control


muestra como resultado uno u otro valor dependiendo si se cumple o no una
condicin.
Ejemplo:

Curso: Programacin III Carlos Gonzales Ramos

Pgina 3

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

SELECT IF((7%2)=0,'Si','No');
Retorna ------ No.
SELECT IF(STRCMP('Sistemas','SISTEMAS'),'No es','Si es');
Retorna -

Si es.

3.3.- IFNULL: (condicin, resultadopropuesto).- Este flujo trata de verificar si el


resultado de la condicin es nulo o no si es que es nulo devuelve el resultado
propuesto; en caso contrario retorna el resultado producto de la condicin.
Ejemplos:
Select IFNULL(null,'Valor nulo') Resultado;
Retorna ----- Valor nulo.
SELECT IFNULL((6/0),'Sale nulo') Resultado;
Retorna ----- Sale nulo

3.4.- WHILE Condicin DO .END WHILE: Este flujo tiene la caracterstica


de ser repetitivo; ejecuta todo lo que est dentro del bloque mientras se cumpla la
condicin, se usa en la implementacin de procedimientos almacenados o
funciones definidas por el usuario en MySQL.

3.5.- REPEAT INSTRUCCIONES UNTIL CONDICION END REPEAT: Este


flujo de control tiene su mayor uso en la implementacin de procedimientos
almacenados o funciones definidas por el usuario en el las instrucciones que estn
dentro del bloque RepeatUntil; hasta que la condicin se cumpla.
4.- Procedimientos Almacenados: Vienen a ser un conjunto de instrucciones que se
guarda en un archivo generalmente de texto, en el cual se puede realizar diferentes
clculos, bsquedas y visualizaciones de la informacin que esta almacenada en la base
de datos. Nos permiten generar y visualizar la informacin de una manera ms dinmica
en comparacin con otras formas y adems cuando se implementan aplicaciones, nos
facilitan la separacin de la lgica de la aplicacin en diferentes capas.
4.1.- Sintaxis General:

Curso: Programacin III Carlos Gonzales Ramos

Pgina 4

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

DELIMITER//
CREATE PROCEDURE NOMBREPROCEDIMIENTO ([Argumentos])
Begin
Instrucciones;
End//
DELIMITER;
Luego de creado el procedimiento quedara formando parte de la base de datos
como un objeto ms de la misma. Posteriormente podremos utilizar el
procedimientos para lo cual lo llamaremos siguiendo la siguiente sintaxis.
Call nombreprocedimiento([Valores de los argumentos]);
4.2.- Procedimientos sin parmetros: Son aquellos procedimientos que entre los
parntesis no llevan ningn argumento.
Ejemplos

Implementar un procedimiento almacenado que realice y muestre el valor


de la suma de los 10 primeros nmeros.
DELIMITER//
Create procedure Suma10()
Begin
Declare num int;
Declare Sum int;
Set num=1;
Set Sum=0;
While num<=10 Do
Set Sum=Sum+num;
Set num=num+1;
End While;
Select Sum SumaDiez;
End//
Delimiter;

Implemente un procedimiento almacenado que le permita mostrar la fecha


actual del sistema en el formato dd/mm/yyyy.

Curso: Programacin III Carlos Gonzales Ramos

Pgina 5

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

4.3.- Procedimientos con parmetros de entrada: Para enviarle un argumento de


entrada a un procedimiento debemos anteponerle al nombre del argumento la palabra
reservada IN; pero si no le ponemos nada MySQL lo interpreta por defecto como un
parmetro de entrada.
Ejemplos

Implementar un procedimiento almacenado que muestre apellidos y


nombres del cliente cuyo DNI se le pasa como argumento.
Solucin:
create procedure VerApeNom(in doc_iden varchar(8))
select concat(p.ape,' ',p.nom) as cliente
from persona p, cliente c
where p.dni=c.dni and p.dni=doc_iden;
Call VerApeNom('45564184');

Implementar un procedimiento almacenado que pasa como argumento una


cadena de caracteres y la muestra en mayscula si su primer carcter es la
letra m en caso contrario la muestra en minscula.

Implementar un procedimiento almacenado que muestre las ventas


realizadas en el da.

Implementar un procedimiento almacenado que permita saber por nmero


de compra el detalle de productos adquiridos, as como la cantidad.

5.- Funciones: Son casi lo mismo o similares a los procedimientos almacenados con la
diferencia de que estas siempre retornan un valor y al momento de pasar los parmetros,
no se necesita indicarles si es del tipo input u output, esta caracterstica es propia del
MySQL.
5.1.- Sintaxis General:
Delimiter//
Create function Nombre_funcion([Argumentos]) as Returns TipoDatoDevueve
Begin
Instrucciones;
Return valor_devolver;
End//

Curso: Programacin III Carlos Gonzales Ramos

Pgina 6

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

Delimiter;
5.2.- Ejemplos de Aplicacin:

Implementar una funcin que calcule el factorial de un nmero.


Solucin:
delimiter//
create function Factorial(n int) returns int
begin
Declare fa int default 1;
Declare num int default 1;
while num<=n do
Set fa=fa*num;
Set num=num+1;
end while;
return fa;
end//
delimiter;
La usamos de la siguiente manera:
Select factorial (5); esta instruccin nos retornara el valor de 120;

Implementar una funcin que capture las primeras letras de una cadena de
caracteres.
Solucin:
CREATE
FUNCTION
captura_letras(texto
varchar(100))
RETURNS
varchar(10)
BEGIN
declare letras varchar(15) default '';
declare cont int default 0;
while cont<=length(texto) do
if mid(texto,cont,1)=space(1) then
set letras=Concat(letras,mid(texto,cont+1,1));
end if;
set cont=cont+1;
end while;
return letras;

Curso: Programacin III Carlos Gonzales Ramos

Pgina 7

INGENIERIA DE SISTEMAS E INFORMATICA - UNASAM

2014 -II

END $$
DELIMITER ;
Ejercicios: Los siguientes ejercicios trabajar con la base de datos mybdventa.
1.- Implementar una funcin que capture las primeras letras de una cadena de caracteres.
2.- Implementar una funcin que genere el cdigo de un cliente haciendo uso de la
funcin implementada en el punto nmero 1.
3.- Implementar un procedimiento almacenado que inserte clientes haciendo uso de la
funcin implementada en el punto nmero 2.
4.- implementar una funcin que permita conocer el nmero de clientes que se encuentran
registrados en el sistema de ventas.

Curso: Programacin III Carlos Gonzales Ramos

Pgina 8