# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.attachment_link.description
See all the wonderful things Meny Reynaga has made

# data[].attributes.body
Un "trigger" (disparador o desencadenador) es un tipo de procedimiento almacenado que se ejecuta cuando se intenta modificar los datos de una tabla (o vista). Se definen para una tabla (o vista) específica.

create triggre NOMBREDISPARADOR

on NOMBRETABLA

for EVENTO- insert, update o delete

as

SENTENCIAS

BEFORE|AFTER: Especifica si el Trigger se ejecuta antes o después del evento DML.

UPDATE|INSERT|DELETE:

Aquí eliges que sentencia usarás para que se ejecute el Trigger.

ON nombre_de_la_tabla:

En esta sección estableces el nombre de la tabla asociada.

FOR EACH ROW: Establece que el Trigger se ejecute por cada fila en la tabla asociada.

<bloque_de_instrucciones>: Define el bloque de sentencias que el Trigger ejecutará al ser invocado.

UTILIDAD

Con los Triggers podemos implementar varios casos de uso que mantengan la integridad de la base de datos, como Validar información, Calcular atributos derivados, Seguimientos de movimientos en la base de datos, etc.

Cuando surja una necesidad en donde veas que necesitas que se ejecute una acción implícitamente(sin que la ejecutes manualmente) sobre los registros de una tabla, entonces puedes considerar el uso de un Trigger.

# data[].attributes.body
Funciones: Una función es una rutina almacenada que recibe unos parámetros escalares de entrada, luego los procesa según el cuerpo definido de la función y por ultimo retorna en un resultado de un tipo especifico que permitirá cumplir un objetivo.

Existen 3 tipos:

Funciones escalares

Funciones con valores de tabla en linea

Funciones con valores de tabla y múltiples instrucciones

FUNCIONES ESCALARES: Las funciones escalares son aquellas que reciben parámetros de entrada para ser procesados y al final retornar en un tipo de dato sencillo.

EJEMPLO: Cuantas veces ha viajado un pasajero en un lapso de tiempo.

CREATE FUNCTION cuanto_ha_viajado(@idpasajero INT, @fecha_inicio DATE , @fecha_final DATE)

RETURNS INT

AS

BEGIN

DECLARE @cantidad_ocasiones INT;

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

FUNCIONES CON VALORES DE TABLA EN LINEA:  Este tipo de función 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.

EJEMPLO: Ver todas las compras realizadas de un producto especifico.

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)

# data[].attributes.body
procedimiento almacenado (stored procedure en inglés) es un programa (o procedimiento) almacenado físicamente en una base de datos. Su implementación varía de un gestor de bases de datos a otro. La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta a una petición de usuario, es ejecutado directamente en el motor de bases de datos, el cual usualmente corre en un servidor separado.

No es nada mas que un código guardado de SQL que puede ser utilizado una y otra vez.

CREACIÓN:

Se crea con las palabras CREATE PROC y se termina con la palabra END

EJEMPLO:

CREATE PROC  Mi_Procedure AS

BEGIN

SELECT Customers.ContactName, Customers.City FROM Customers

ORDER BY ContactName

END

EJECUCIÓN

Para llamar un procedimiento se utiliza la palabra EXCECUTE o EXEC

EJEMPLO:

EXECUTE Mi_Procedure

En caso de que el procedimiento requiera recibir parámetros, estos se anexan en la sentencia.

EXEC SP_EJEMPLO2 ‘Alejandra Camino','Madrid'

EDITAR:

Para editar un procedimiento se utiliza la misma palabra reservada para editar una tabla es decir, ALTER.

Ejemplo:

ALTER PROCEDURE procedimiento1

AS

SELECT * FROM Employees WHERE EmployeeID = (SELECT MAX(EMployeeID) FROM Employees)

ELIMINAR:

Para eliminar se utiliza la sentencia DROP

EJEMPLO:

DROP procedimiento1

# data[].attributes.body
Estructura de una transacción
Una transacción de base de datos consta de una o más instrucciones. Específicamente, una transacción consiste en una de las siguientes:

Una o más sentencias DML que en conjunto constituyen un cambio atómica a la base de datos

Una declaración DML

Una transacción tiene un principio y un final.
Inicio de una transacción
Una transacción comienza cuando se encuentra la primera sentencia de SQL ejecutable.
Una sentencia de SQL ejecutable es una instrucción SQL que genera llamadas a una instancia de base de datos, incluyendo DML y DDL y la instrucción SET TRANSACCIÓN.
Cuando se inicia una transacción, Oracle Database le asigna un segmento undo de datos para grabar las entradas Rollback para la nueva transacción. Un id de transacción se asigna durante la primera instrucción DML.

# data[].attributes.body
Las transacciones especifican un nivel de aislamiento que define el grado en que se debe aislar una transacción de las modificaciones de recursos o datos realizadas por otras transacciones. Los niveles de aislamiento se describen en cuanto a los efectos secundarios de la simultaneidad que se permiten, como las lecturas desfasadas o ficticias.

Control de los niveles de aislamiento de transacción:

Controla si se realizan bloqueos cuando se leen los datos y qué tipos de bloqueos se solicitan.

Duración de los bloqueos de lectura.

Si una operación de lectura que hace referencia a filas modificadas por otra transacción:

Se bloquea hasta que se libera el bloqueo exclusivo de la fila.

Recupera la versión confirmada de la fila que existía en el momento en el que empezó la instrucción o la transacción.

Lee la modificación de los datos no confirmados.

# data[].attributes.body
Es un término más amplio que el de integridad. Podría definirse como la coherencia entre todos los datos de la base de datos. Cuando se pierde la integridad también se pierde la consistencia. Pero la consistencia también puede perderse por razones de funcionamiento.

Una transacción finalizada (confirmada parcialmente) puede no confirmarse definitivamente (consistencia).

Si se confirma definitivamente el sistema asegura la persistencia de los cambios que ha efectuado en la base de datos.

Si se anula los cambios que ha efectuado son deshechos.

# data[].attributes.body
Una unidad lógica de trabajo debe exhibir cuatro propiedades, conocidas como propiedades ACID (atomicidad, coherencia, aislamiento y durabilidad), para ser calificacada como transacción.

Atomicity: Una Transacción (X) se ejecuta completamente o de otra manera se eliminan los cambios parciales realizados.

Begin Transacction: comentado anteriormente es donde inicia la transacción.
Programa: realizas los cambios que deseas en la base de datos.
End Transacction: termina la transacción que acabas de realizar.

Responsable: El método de recuperación, de no completar todas las operaciones, devuelve la BD a su estado anterior a empezar esa X (rollback) se utiliza rollback cuando los cambios que utilizamos no son los requeridos en la base de datos, dejándolos en un estado original como si no se hubiera realizado ningún movimiento o cambio.

Coherencia:  Asegura que los datos que observamos no cambian (por otros usuarios) hasta que acabemos la Transacción.

Responsable: los programadores mediante la definición adecuada de la integridad referencial: check, triggers, primary key, foreign key,…

Aislamiento: Los efectos de una X no son visibles a otros usuarios mientras no se confirmen.

# data[].attributes.body
Desde el punto de vista del usuario la interacción con la base de datos se lleva a cabo mediante operaciones con significado en el modelo semántico (por ejemplo, una transferencia de fondos en un banco).

Desde el punto de vista de la base de datos estas operaciones pueden estar formadas por varias operaciones elementales (por ejemplo, quitar fondos de una cuenta y añadírselos a otra)