Está en la página 1de 6

¿Qué es un Trigger?

Un Trigger, también llamado Disparador, en una base de datos, es un procedimiento que se ejecuta
cuando se cumple una condición establecida.

Depende de la base de datos, los Triggers pueden ser antes o después de ejecutar un INSERT, UPDATE o
DELETE.

Un Trigger funciona tanto al insertar,actualizar o borrar datos en una base de datos o incluso al crear o
editar usuarios.

¿Qué funcionalidad tienen?

Los Triggers son usados para mejorar la administración de la Base de Datos, sin necesidad de que el
usuario ejecute esas sentencias SQL.

La utilidad que se le acostumbra mayoritariamente a dar, es para prevenir errores de datos, actualizar
tablas, modificar valores, entre muchas utilidades que el administrador le quiera dar.

¿Qué necesito para hacer mi propio Trigger?

Un programa en el cual poder escribir sentencias SQL/MySQL, por ejemplo MySQL Workbench, y en él
una base de datos, con tablas, campos o inserciones.

Tenemos una base de datos llamada Campus de Verano, dónde en ella tenemos la información de todos
los usuarios que están registrados en el campus, el nombre y los DNI de los monitores, para tener todo
bajo control, hemos creado una tabla vacía, en la cual queremos que se inserte automáticamente datos
del nombre del administrador que está insertando datos, para tenerlo controlado, que nos haga una
especie de chivatazo, por si alguna vez pasa algo.

¿Cómo podemos ver que datos ha introducido que administrador de la Base de Datos?

CON UN TRIGGER!

Vamos a ver su sentencia con un pequeño ejemplo.

Como podemos ver, delimitamos el Trigger, al principio y al final, para que ejecute todas las sentencias de
delimitador a delimitador.

Creamos el Trigger com CREATE TRIGGER nombre_del_trigger

Le especificamos en momento en que queremos que actúe, que puede variar en AFTER o BEFORE.

Y le decimos en que tabla queremos que haga efecto, on registro_inserts for each row 

Abrimos y cerramos el Trigger con un Begin End; y dentro de éste pondremos las sentencias que
queremos que contenga el Trigger, esa sentencia va a ser que inserte en la tabla registro, los valores del
usuario actual, la hora y fecha, y que ha insertado datos.
Definición de procedimiento almacenado

Los procedimientos almacenados son grupos formados por instrucciones SQL y el lenguaje de control de
flujo. Cuando se ejecuta un procedimiento, se prepara un plan de ejecución para que la subsiguiente
ejecución sea muy rápida. Los procedimientos almacenados pueden:

•Incluir parámetros

•Llamar a otros procedimientos

•Devolver un valor de estado a un procedimiento de llamada o lote para indicar el éxito o el fracaso del
mismo y la razón de dicho fallo

•Devolver valores de parámetros a un procedimiento de llamada o lote

•Ejecutarse en SQL Server remotos

La posibilidad de escribir procedimientos almacenados mejora notablemente la potencia, eficacia y


flexibilidad de SQL. Los procedimientos compilados mejoran la ejecución de las instrucciones y lotes de
SQL de forma dramática. Además, los procedimientos almacenados pueden ejecutarse en otros SQL
Server si el servidor del usuario y el remoto están configurados para permitir logins remotos. Escriba
disparadores en su SQL Server localque ejecuten procedimientos en un servidor remoto siempre que
determinados eventos,como las eliminaciones, actualizaciones o inserciones, tengan lugar a nivel local.Los
procedimientos almacenados se diferencian de las instrucciones SQL ordinarias y delos lotes de
instrucciones SQL en que están precompilados. La primera vez que se ejecutaun procedimiento, el
procesador de consultas de SQL Serverlo analiza y prepara un plan deejecución que se almacena de forma
definitiva en una tabla del sistema. Posteriormente, el procedimiento se ejecuta según el plan
almacenado. Puesto que ya se ha realizado la mayor  parte del trabajo de procesamiento de consultas, los
procedimientos almacenados se ejecutan casi de forma instantánea. SQL Server proporciona una gran
variedad de procedimientos almacenados como herramientas adecuadas para el usuario. Estos
procedimientos almacenados se llaman procedimientos del sistema. Los procedimientos almacenados se
crean con create procedure. Para ejecutar un procedimiento almacenado, ya sea un procedimiento del
sistema o uno definido por elusuario, use el comando execute. También puede utilizar el nombre del
procedimientoalmacenado solo, siempre que sea la primera palabra de una instrucción o lote.

Ejemplos de creación y uso de procedimientos almacenados

La sintaxis para la creación de un procedimiento almacenado sencillo, sin funciones especiales como
parámetros, es:

create procedure

  procedure_name

as

SQL_statements

Los procedimientos almacenados son objetos de base de datos, y sus nombres deben ajustarse a las
reglas para identificadores. Es posible incluir cualquier número y cualquier tipo de instrucción SQL, salvo
las instrucciones

create

. Consulte"Reglas asociadas a procedimientos almacenados". Un procedimiento puede ser tan sencillo


como una sola instrucción que enumere los nombres de todos los usuarios de una base de datos:

create procedure namelistas select name from sysusers


Para ejecutar un procedimiento almacenado, emplee la palabra clave

execute

y el nombredel procedimiento almacenado, o simplemente especifique el nombre del


procedimiento,siempre que se envíe a SQL Server solo o sea la primera instrucción de un lote.
Puedeejecutar 

namelist

de cualquiera de las siguientes formas:

namelistexecute namelistexec namelist

¿Cuáles son las funciones de base de datos SQL?

Funciones de agregado

Las funciones de agregado realizan un cálculo sobre un conjunto de valores y devuelven un solo valor. Se
pueden usar en la lista de selección o en la cláusula HAVING de una instrucción SELECT.Puede usar una
agregación en combinación con la cláusula GROUP BY para calcular la agregación en las categorías de
filas. Use la cláusula OVER para calcular la agregación en un intervalo de valor específico. La cláusula OVER
no puede seguir las agregaciones GROUPING o GROUPING_ID.

Todas las funciones de agregación son deterministas; es decir, siempre devuelven el mismo resultado
cuando se ejecutan con los mismos valores de entrada. Para más información, vea Funciones
deterministas y no deterministas.

Funciones analíticas

Las funciones analíticas calculan un valor agregado basándose en un grupo de filas. A diferencia de las
funciones de agregado, estas funciones pueden devolver varias filas para cada grupo. Puede usar
funciones analíticas para calcular medias móviles, totales acumulados, porcentajes o resultados de N
valores superiores dentro de un grupo.

Funciones de categoría

Las funciones de categoría devuelven un valor de categoría para cada fila de una partición. Según la
función que se utilice, algunas filas pueden recibir el mismo valor que otras. Las funciones de categoría
son no deterministas.

Funciones de conjuntos de filas

Las funciones de conjuntos de filas devuelven un objeto que se puede usar como referencias de tabla en
una instrucción SQL.

Funciones escalares

Operan sobre un valor y después devuelven otro valor. Las funciones escalares se pueden utilizar donde la
expresión sea válida.

Determinismo de función

Las funciones integradas de SQL Server son deterministas o no deterministas. Las funciones son


deterministas cuando devuelven siempre el mismo resultado cada vez que se llaman con un conjunto
específico de valores de entrada. Las funciones son no deterministas cuando es posible que devuelvan
distintos resultados cada vez que se llaman con un mismo conjunto específico de valores de entrada. Para
más información, vea Funciones deterministas y no deterministas.

Intercalación de funciones
Las funciones que toman una entrada de cadena de caracteres y devuelven una salida de cadena de
caracteres utilizan la intercalación de la cadena de entrada para la salida.

Las funciones que toman entradas que no son de caracteres y devuelven una cadena de caracteres
utilizan la intercalación predeterminada de la base de datos actual para la salida.

Las funciones que toman varias entradas de cadena de caracteres y devuelven una cadena de caracteres
utilizan las reglas de prioridad de intercalación para establecer la intercalación de la cadena de
salida. Para más información, vea Prioridad de intercalación (Transact-SQL).
CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int)
RETURNS TABLE
AS
RETURN
(
SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'Total'
FROM Production.Product AS P
JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID
JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID
JOIN Sales.Customer AS C ON SH.CustomerID = C.CustomerID
WHERE C.StoreID = @storeid
GROUP BY P.ProductID, P.Name
);

CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int)


RETURNS int
AS
-- Returns the stock level for the product.
BEGIN
DECLARE @ret int;
SELECT @ret = SUM(p.Quantity)
FROM Production.ProductInventory p
WHERE p.ProductID = @ProductID
AND p.LocationID = '6';
IF (@ret IS NULL)
SET @ret = 0;
RETURN @ret;
END;

Tema 5. Las subconsultas (I)


Definiciones
Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT que
llamaremos consulta principal.

Se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula HAVING de la consulta


principal.

Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que
aparece encerrada entre paréntesis, no puede contener la cláusula ORDER BY, ni puede ser la UNION de
varias sentencias SELECT, además tiene algunas restricciones en cuanto a número de columnas según el
lugar donde aparece en la consulta principal. Estas restricciones las iremos describiendo en cada caso.

Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta por cada fila de
la consulta principal.

Se aconseja no utilizar campos calculados en las subconsultas, ralentizan la consulta.

Las consultas que utilizan subconsultas suelen ser más fáciles de interpretar por el usuario.

Referencias externas
A menudo, es necesario, dentro del cuerpo de una subconsulta, hacer referencia al valor de una columna
en la fila actual de la consulta principal, ese nombre de columna se denomina referencia externa.
Una referencia externa es un nombre de columna que estando en la subconsulta, no se refiere a ninguna
columna de las tablas designadas en la FROM de la subconsulta sino a una columna de las tablas
designadas en la FROM de la consulta principal. Como la subconsulta se ejecuta por cada fila de la
consulta principal, el valor de la referencia externa irá cambiando.

Ejemplo:

SELECT numemp, nombre, (SELECT MIN(fechapedido) FROM pedidos WHERE rep = numemp)
FROM empleados;

En este ejemplo la consulta principal es SELECT... FROM empleados.


La subconsulta es ( SELECT MIN(fechapedido) FROM pedidos WHERE rep = numemp ).
En esta subconsulta tenemos una referencia externa ( numemp ) es un campo de la tabla empleados
(origen de la consulta principal).

¿Qué pasa cuando se ejecuta la consulta principal?

- se coge el primer empleado y se calcula la subconsulta sustituyendo numemp por el valor que tiene en
el primer empleado. La subconsulta obtiene la fecha más antigua en los pedidos del rep = 101,
- se coge el segundo empleado y se calcula la subconsulta con numemp = 102 (numemp del segundo
empleado)... y así sucesivamente hasta llegar al último empleado.
Al final obtenemos una lista con el número, nombre y fecha del primer pedido de cada empleado.

Si quitamos la cláusula WHERE de la subconsulta obtenemos la fecha del primer pedido de todos los
pedidos no del empleado correspondiente.

Anidar subconsultas

Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la cláusula WHERE (por


ejemplo) de otra subconsulta que a su vez forma parte de otra consulta principal. En la práctica, una
consulta consume mucho más tiempo y memoria cuando se incrementa el número de niveles de
anidamiento. La consulta resulta también más difícil de leer , comprender y mantener cuando contiene
más de uno o dos niveles de subconsultas.

Ejemplo:

SELECT numemp, nombre


FROM empleados
WHERE numemp = (SELECT rep FROM pedidos WHERE clie = (SELECT numclie FROM clientes WHERE
nombre = 'Julia Antequera'))

En este ejemplo, por cada linea de pedido se calcula la subconsulta de clientes, y esto se repite por cada
empleado, en el caso de tener 10 filas de empleados y 200 filas de pedidos (tablas realmente pequeñas),
la subconsulta más interna se ejecutaría 2000 veces (10 x 200).

Subconsulta en la lista de selección

Cuando la subconsulta aparece en la lista de selección de la consulta principal, en este caso la


subconsulta, no puede devolver varias filas ni varias columnas, de lo contrario se da un mensaje de
error.

Muchos SQLs no permiten que una subconsulta aparezca en la lista de selección de la consulta principal
pero eso no es ningún problema ya que normalmente se puede obtener lo mismo utilizando como origen
de datos las dos tablas. El ejemplo anterior se puede obtener de la siguiente forma:
SELECT numemp, nombre, MIN(fechapedido)
FROM empleados LEFT JOIN pedidos ON empleados.numemp = pedidos.rep
GROUP BY numemp, nombre

En la cláusula FROM

En la cláusula FROM se puede encontrar una sentencia SELECT encerrada entre paréntesis pero más que
subconsulta sería una consulta ya que no se ejecuta para cada fila de la tabla origen sino que se ejecuta
una sola vez al principio, su resultado se combina con las filas de la otra tabla para formar las filas origen
de la SELECT primera y no admite referencias externas. 

En la cláusula FROM vimos que se podía poner un nombre de tabla o un nombre de consulta, pues en vez
de poner un nombre de consulta se puede poner directamente la sentencia SELECT correspondiente a esa
consulta encerrada entre paréntesis.

Subconsulta en las cláusulas WHERE y HAVING

Se suele utilizar subconsultas en las cláusulas WHERE o HAVING cuando los datos que queremos visualizar
están en una tabla pero para seleccionar las filas de esa tabla necesitamos un dato que está en otra tabla.

Ejemplo:

SELECT numemp, nombre


FROM empleados
WHERE contrato = (SELECT MIN(fechapedido) FROM pedidos)

En este ejemplo listamos el número y nombre de los empleados cuya fecha de contrato sea igual a la
primera fecha de todos los pedidos de la empresa.

En una cláusula WHERE / HAVING tenemos siempre una condición y la subconsulta actúa de operando


dentro de esa condición.
En el ejemplo anterior se compara contrato con el resultado de la subconsulta. Hasta ahora las
condiciones estudiadas tenían como operandos valores simples (el valor contenido en una columna de
una fila de la tabla, el resultado de una operación aritmética...) ahora la subconsulta puede devolver una
columna entera por lo que es necesario definir otro tipo decondiciones especiales para cuando se utilizan
con subconsultas.

Estas nuevas condiciones se describen en la página siguiente...

También podría gustarte