Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una vista es una consulta, que refleja el contenido de una o más tablas, desde la que se
puede acceder a los datos como si fuera una tabla.
También es una consulta especial que se emplea para registrar selecciones complejas o
que se usan frecuentemente.
Una vez creada la vista se puede realizar una selección de los datos como si fuera esta una
tabla e incluso se puede utilizar para definir procedimientos almacenados.
Dos son las principales razones por las que podemos crear vistas.
Seguridad, nos pueden interesar que los usuarios tengan acceso a una parte de la
información que hay en una tabla, pero no a toda la tabla.
Comodidad, como hemos dicho el modelo relacional no es el más cómodo para
visualizar los datos, lo que nos puede llevar a tener que escribir complejas
sentencias SQL, tener una vista nos simplifica esta tarea.
Las vistas no tienes una copia física de los datos, son consultas a los datos que hay en las
tablas, por lo que si actualizamos los datos de una vista, estamos actualizando realmente
la tabla, y si actualizamos la tabla estos cambios serán visibles desde la vista.
Creación de vistas.
Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar
un nombre a la vista y una sentencia SQL SELECT valida.
Ejemplo: Crear una vista sobre nuestra tabla alquileres, en la que se nos muestra el
nombre y apellidos del cliente en lugar de su código.
AS
(
SELECT nombre, apellidos, matricula, fx_alquiler, fx_devolucion
FROM tAlquileres, tClientes
WHERE ( tAlquileres.codigo_cliente = tClientes.codigo )
)
Por ultimo podemos eliminar la vista a través de la sentencia DROP VIEW. Para eliminar la
vista que hemos creado anteriormente se utilizaría:
EJEMPLOS DE VISTAS
USE NORTHWIND GO
--Creación De vista Proveedores y sus pedidos
--VER VISTAS
SELECT*FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='VIEW'
Las funciones definidas por el usuario en SQL Server permiten retornar tablas en los
resultados. Esta característica brinda al programador facilitar a la hora de administrar sus
bases de datos.
Las funciones escalares son aquellas que reciben parámetros de entrada para ser
procesados y al final retornar en un tipo de dato sencillo. Cuando hablo de sencillo me
refiero a tipos de datos elementales como INT, FLOAT, VARCHAR, etc.
SQL Server no permite que las funciones escalares retornen en los tipos text, ntext, image,
cursor y timestamp. Al igual que MySQL, usaremos la palabra reservada RETURNS para
indicar el tipo de datos en el cual retornara la función. El cuerpo de la función escalar está
contenido en un bloque de instrucciones como en los procedimientos.
A continuación veremos un enunciado que debe ser solucionado con la creación de una
función escalar. El problema esta basado en una base de datos de una aerolinea. Observa:
SELECT @cantidad_ocasiones=COUNT(a.idpasajero)
FROM Aerolinea.Boleto AS a
WHERE a.idpasajero=@idpasajero AND (fecha_compra BETWEEN @fecha_inicio AND
@fecha_final);
IF (@cantidad_ocasiones IS NULL)
SET @cantidad_ocasiones=0;
RETURN @cantidad_ocasiones;
END
Este tipo de funciones tiene la misma sintaxis que una función escalar, la única diferencia
está en que retorna un tipo de dato TABLE, es decir, una tabla compuesta de registros.
Veamos la variación de la sintaxis:
Las funciones que retornan tablas son muy útiles cuando tenemos consultas que tengan
JOINS debido a la reducción de complejidad
Supongo que tenemos una base de datos comercial de una tienda digital que vende
Hardware. Esta basase de datos tiene la famosa relación entre clientes, pedidos y
artículos. El requerimiento dice así:
Consulte todas las compras realizadas de un producto específico. Use el código del
producto para generar los resultados y muestre el nombre del cliente que compro ese
producto, la fecha en que se compró, el precio que tiene en ese momento y la cantidad
comprada.
CREATE FUNCTION ventas_producto(@idproducto INT)
RETURNS TABLE
AS
RETURN(
SELECT C.NOMBRE, F.FECHA, DF.CANTIDAD, DF.PRECIO, P.IDPRODUCTO
FROM
CLIENTE AS C JOIN FACTURA AS F ON C.IDCLIENTE=F.IDCLIENTE
JOIN DETALLEFACTURA AS DF ON DF.IDFACTURA=F.IDFACTURA
JOIN PRODUCTO AS P ON P.IDPRODUCTO=DF.IDPRODUCTO
WHERE P.IDPRODUCTO=@idproducto)
La anterior función retorna en una tabla que representa todas las compras de un producto
realizadas hasta el momento por los clientes. Ahora podemos realizar consultas sobre esta
tabla, por ejemplo, si quisiéramos sumar el total de todas las ventas del artículo con
código 1003, podríamos hacer la siguiente consulta:
Con esa función la base de datos de nuestra tienda virtual de hardware ganara velocidad
de cálculo, además de ahorrar tiempo para los desarrolladores y administradores
ENUNCIADO
Muestre todos los registros de la tabla EMPLEADO que tenga un salario mayor o igual a un
valor establecido como parámetro. Además de ello conviene en un solo campo el nombre
y apellido del empleado y agregue un nuevo atributo que muestre la cantidad de días que
lleva el empleado desde su fecha de ingreso.
Con la anterior función retornamos en una ventana tabla personalizada como lo pedía el
enunciado. Nota que antes de escribir el bloque de instrucciones hemos definido una
variable tipo TABLE con una estructura de 4 columnas. Esta definición se parece mucho a
la sintaxis CREATE TABLE para crear tablas. Y al final insertamos los datos con el formato
que se pidió.
Si queremos ver que registros tiene la tabla retornada por la función, solo realizamos una
consulta de la siguiente forma.
SELECT*FROM reporte1_empleados(1000);
Para modificar una función debes usar ALTER FUNCTION. Este comando te permite
cambiar absolutamente toda la sintaxis de la función. Veamos como modificamos una
función escalar que antes tomaba dos números para una suma y ahora deseamos que
tome tres parámetros. Además queremos que proteja el esquema de la base de datos.
Elimina una función definida por el usuario con la famosa sentencia DROP. Mira como
borramos una función que pronostica la cantidad de huéspedes futuros de un hotel.
Procedimientos
Los procedimientos almacenados son un conjunto de instrucciones SQL mas una serie de
estructuras de control que nos permite dotar de cierta lógica la procedimiento. Estos
procedimientos están guardados en el servidor y pueden ser accedidos a través de llamas,
como veremos más adelante.
Para crear un procedimento, MySQL nos ofrece la dirección CREATE PROCEDURE y para
funciones CREATE FUNCTION al crearlo este es ligado o relacionado con la base de datos
que se está usando, tal como cuando creamos una tabla, para llamar a un procedimiento
lo hacemos mediante la instrucción CALL. Desde un procedimiento podemos invocar a su
vez a otros procedimientos o funciones.
Este procedimiento tiene como objetivo listar la provisión de gratificación para cada
empleado según el periodo ingresado.
CRITERIOS A EVALUAR:
CARACTERISTICAS:
NOMBRE: SP_ProvisionGratificacion
Entrada:
Salida:
CONCAT
FORMAT
ROUND
IF
Procedimiento
SELECT
CONCAT(e.NomEmp,' ',e.ApeEmp)EMPLEADO, FORMAT(e.sueldo,2) SUELDO,
FORMAT(ROUND(IF(YEAR(e.FechaIngEmp)=anio,
IF(mes <6,if(MONTH(e.FechaIngEmp)<6,(e.sueldo/6)*(6-
MONTH(e.FechaIngEmo)),e.sueldo).
IF(MONTH(e.FechaIngEmp)>6,(e.sueldo/6)*(12-
MONTH(e.FechaIngEmp)),e.sueldo)),E.sueldo)2),2)GRATIFICACION,
FROM empleado e;
TRIGGERS
Los Triggers o Disparadores son objetos que se asocian con tablas y se almacenan en la
base de datos. Su nombre se deriva por el comportamiento que presentan en su
funcionamiento, ya que se ejecutan cuando sucede algún evento sobre las tablas a las que
se encuentra asociado. Los eventos que hacen que se ejecute un trigger son las
operaciones de inserción (INSERT), borrado (DELETE) o actualización (UPDATE), ya que
modifican los datos de una tabla.
La utilidad principal de un trigger es mejorar la administración de la base de datos, ya que
no requieren que un usuario los ejecute. Por lo tanto, son empleados para implementar
las REGLAS DE NEGOCIO (tipo especial de integridad) de una base de datos. Una Regla de
Negocio es cualquier restricción, requerimiento, necesidad o actividad especial que debe
ser verificada al momento de intentar agregar, borrar o actualizar la información de una
base de datos. Un trigger puede prevenir errores en los datos, modificar valores de una
vista, sincronizar tablas, entre otros. EJEMPLO:
Crear un Trigger para insertar un pedido de algún producto cuando la cantidad de éste, en
nuestro almacén, sea inferior a un valor dado.
CREATE TRIGGER TR_ARTICULO ON ARTICULOS AFTER UPDATE AS BEGIN INSERT INTO
HCO_ARTICULO (IDARTICULO, STOCK, FECHA) SELECT ID_ARTICULO, STOCK, GETDATE()
FROM INSERTED END
INSERT INTO ARTICULOS VALUES (1, 'MEMORIA', 12, '12/03/2014')
SELECT * FROM ARTICULOS
UPDATE ARTICULOS SET STOCK = STOCK - 20 WHERE ID_ARTICULO = 1
SELECT * FROM HCO_ARTICULO