BASE DE DATOS II (2) .PDF ULADECH
BASE DE DATOS II (2) .PDF ULADECH
BASE DE DATOS II (2) .PDF ULADECH
BASE DE DATOS II
Experiencias Prácticas
Víctor Hugo Tapia Jacinto
BASE DE DATOS II
Experiencias Prácticas
BASE DE DATOS II
Victor Hugo Tapia Jacinto
Diseño y diagramación:
Ediciones Carolina (Trujillo).
Editado por:
Universidad Católica Los Ángeles de Chimbote
Jr. Tumbes 247 Casco Urbano Chimbote – Perú
RUC: 20319956043
Telf: (043)343444
Lista de Tablas 11
Lista de Ilustraciones 13
Presentación 15
Introducción 17
permiten validar los datos a nivel de Primary Key y Foreign Key. Asi-
mismo podremos ver ejemplos para la importación y exportación de
datos en diferentes formatos.
INTRODUCCIÓN A UN
SGBD Y AL SQL
I.1. Caso práctico
La empresa miKioscoVirtual es una organización que se dedi-
ca al rubro de las ventas de ejemplares (físicos y virtuales) a sus
clientes vía web.
Estos clientes previamente registrados en su portal tienen acce-
so a los ejemplares que la empresa oferta catalogados por títulos del
ejemplar, tipos de ejemplar (libros, periódicos, diccionarios, etc) y
categorías de ejemplar (generalidades, acción, ficción, novelas,
etc), los que pueden variar según la demanda diaria, semanal o
anual; de la emisión de ejemplares, los autores según nacionalidad
y editoriales y ordenados por año de publicación y edición, quedan-
do desfasados –en el caso de ejemplares con el mismo título– por el
de menor antigüedad.
Los clientes realizan sus pedidos vía el portal web, accediendo
al catálogo a través de una ventana de seguridad que le solicita un
login (validado a través del ID del cliente) y un password (que tendrá
que ser validado por el administrador de la base de datos). Estos
pedidos pueden ser de manera corporativa (empresa) o individual y
no tienen límite de cantidad solicitada en el caso de que sea un pedi-
do de un ejemplar virtual y según la disponibilidad del stock para el
caso de que el ejemplar sea físico.
Los pedidos de los ejemplares serán entregados en el mismo
día; en el caso de los ejemplares físicos dependerá de la ubicación
física del cliente, variando siempre el estado del pedido que puede
ser atendido, en proceso, enviado, cancelado, recepcionado.
En el caso de los ejemplares tipo periódicos, estos al finalizar el
día automáticamente son considerados con stock 0, para iniciar el
día con nuevo stock.
La empresa también requiere que al finalizar el día se emitan
reportes con los movimientos realizados por los clientes (pedidos)
respecto a los ejemplares, condiciones de sus ejemplares, así como
los usuarios que han visitado o accedidos al sitio web a consultar,
solicitar o hacer el seguimiento de algún ejemplar.
SQL
A diferencia de muchos lenguajes de descripción de datos, SQL
utiliza una acción de versos imperativo cuyo efecto es modificar el
esquema de la base de datos para cualquier SGBD, añadiendo,
cambiando o eliminando las declaraciones que se pueden mezclar
libremente con otras sentencias SQL, por lo que el DDL no es real-
mente una lengua independiente. La declaración más común es
CREATE TABLE. El lenguaje de consulta SQL, el más difundido
entre los gestores de bases de datos, admite las siguientes senten-
cias de definición: CREATE, DROP y ALTER, cada una de las cuales
se puede aplicar a las tablas, vistas, procedimientos almacenados y
triggers de la base de datos.
SENTENCIA CREATE
Create Database
La sentencia CREATE DATABASE se utiliza para crear bases de
datos.
Create Table
La sentencia CREATE TABLE se utiliza para crear una tabla en una
base de datos existente.
Create Index
Los índices se utilizan para recuperar datos de la base de datos muy
rápidamente. Los usuarios no pueden ver los índices, solo se utili-
zan para acelerar las búsquedas / consultas.
Sintaxis
CREATE INDEX nombreindex ON nombretabla
(columna1, columna2, ...);
SENTENCIA DROP
La sentencia DROP se utiliza para borrar definitivamente un índice,
tabla o base de datos.
DROP INDEX
DROP TABLE
Se utiliza DROP TABLE para borrar definitivamente una tabla
DROP DATABASE
Se utiliza para borrar una base de datos definitivamente.
SENTENCIA ALTER
La sentencia SQL ALTER se utiliza para añadir, eliminar o modificar
columnas de una tabla.
Limitaciones y restricciones
· La instrucción BACKUP no se permite en una transacción explíci-
ta o implícita.
· Las copias de seguridad que se crean en una versión más recien-
te de SGBD no se pueden restaurar en versiones anteriores del
mismo SGBD.
Recomendaciones
A medida que la base de datos aumenta de tamaño, las copias de
seguridad completas requieren una mayor cantidad de tiempo para
finalizar y espacio de almacenamiento. En el caso de una base de
datos grande, considere la posibilidad de complementar una copia
de seguridad completa con una serie de copias de seguridad dife-
renciales.
Para calcular el tamaño de una copia de seguridad completa de la
base de datos en el SQL Server se utiliza el procedimiento almace-
nado del sistema sp_spaceused .
Donde:
Ejemplo:
Realizar la copia de seguridad en un dispositivo de disco.
USE miKioskoVirtual;
GO
BACKUP DATABASE miKioskoVirtual
TO DISK = 'Z:\ Backups\ miKioskoVirtual.Bak'
WITH FORMAT,
MEDIANAME = 'Z_Backups',
NAME = 'Backup Completo de miKioskoVirtual ';
GO
Usar PowerShell
Use el cmdlet Backup-SqlDatabase. Para indicar explícitamente
que esta es una copia de seguridad completa de la base de datos,
especifique el parámetro -BackupAction con su valor predetermina-
do, Database. Este parámetro es opcional para las copias de seguri-
dad de base de datos completas.
Ejemplo:
Copia de seguridad local completa
En el ejemplo siguiente se crea una copia de seguridad completa de
la base de datos miKioskoVirtual en la ubicación de copia de segu-
ridad predeterminada de la instancia de servidor Servidor\Instance.
Opcionalmente, en este ejemplo se especifica -BackupAction Data-
base.
Importante:
Se recomienda no adjuntar ni restaurar bases de datos de orígenes
desconocidos o que no sean de confianza. Estas bases de datos
pueden contener código malintencionado que podría ejecutar códi-
go Transact-SQL inesperado o provocar errores debido a la modifi-
cación del esquema o de la estructura de la base de datos física.
Sintaxis :
Ejemplo:
USE master;
ALTER DATABASE miKioskoVirtual SET RECOVERY
SIMPLE;
GO
BACKUP DATABASE miKioskoVirtual
TO DISK = 'Z:\ Backups\miKioskoVirtual.bak'
WITH FORMAT;
GO
BACKUP DATABASE miKioskoVirtual
TO DISK = 'Z:\Backups\miKioskoVirtual.bak'
WITH DIFFERENTIAL;
GO
-- Restaure la copia de seguridad completa de la base de
datos (del conjunto de copia de seguridad 1)..
RESTORE DATABASE miKioskoVirtual
FROM DISK = 'Z:\Backups\miKioskoVirtual.bak'
WITH FILE=1, NORECOVERY;
-- Restaurar la copia de seguridad diferencial (del conjunto
de copia de seguridad 2)...
RESTORE DATABASE miKioskoVirtual
FROM DISK = 'Z:\Backups\miKioskoVirtual.bak'
WITH FILE=2, RECOVERY;
GO
ALTER AUTHORIZATION
ON [ <class_type>:: ] entity_name
TO { principal_name | SCHEMA OWNER }
[;]
Ejemplo:
Autorizar a JPerez para crear, modifica o eliminar el diagrama de la
Base de Datos miKioskoVirtual
ALTER AUTHORIZATION
ON DATABASE::miKioskoVirtual
TO JPerez;
USE miKioscoVirtual;
SECUENCIAS EN SQL
La propiedad Identity
Donde:
Ejemplo
Sintaxis:
Donde:
NombreDeSecuencia: es el nombre de la secuencia a modificar.
Restart With: define el valor en el que reiniciará la secuencia.
Sintaxis:
Donde:
Esquema: es el nombre del esquema donde se encuentra la
secuencia. (Ver esquemas)
NombreSecuencia: nombre de la secuencia a eliminar.
SQL INSERT
La sentencia INSERT INTO se utiliza para insertar nuevas filas en
una tabla.
Es posible insertar una nueva fila en una tabla de dos formas distin-
tas:
Ejemplo:
Dada la siguiente tabla Autores:
Para MySQL:
Para Access:
Para ORACLE:
Esto se debe a que las versiones del SQL Server a partir del 2008 ya
trae activada esta opción. Como veremos aquí la manera de cómo
desactivar esta política:
Finalmente Aceptar.
SQL UPDATE
La sentencia UPDATE se utiliza para modificar valores en una tabla.
La sintaxis de SQL UPDATE es:
UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3
UPDATE Autores
SET AUT_Nacionalidad = 'GER'
WHERE AUT_Id = '333333'
SQL DELETE
La sentencia DELETE sirve para borrar filas de una tabla.
La sintaxis de SQL DELETE es:
SQL SELECT
La sentencia SELECT recupera datos de una base de datos y los
devuelve en forma de resultados de la consulta. Consta de seis
cláusulas: las dos primeras (SELECT y FROM) obligatorias y las
otras cuatro pueden ser opcionales.
Cláusula SELECT
Utilizado para consultar campos de una a varias tablas.
Sintaxis:
Nótese que todos los campos van separados por comas, en el caso
que se desee mostrar todos los campos de una tabla solo se debe
utilizar el símbolo asterisco (*)
Cláusula FROM
Utilizado para consultar tablas de una base de datos.
Sintaxis:
Aut_Id Aut_Nombres
111111 Adamaris Tapia Rosales
222222 Anahí Tapia Rosales
333333 Luz Jacinto Heredia
444444 Juan Peres Pai
Tabla 14: Tabla Resultado - Uso Sentencia SELECT, Orden del Usuario.
USO DE CLÁUSULAS,
OPERADORES Y
FUNCIONES
II.1. Cláusula WHERE
La cláusula WHERE es usada para hacer filtros en las consultas, es
decir, seleccionar solamente algunas filas de la tabla que cumplan
una determinada condición haciendo uso para validar esta condi-
ción de un operador (ver operadores SQL).
Para este caso específico tenemos primero que obtener los datos
resultantes (subconsulta) y luego hacer la comparación
Sintaxis
Ejemplos
Operador lógico OR
Es el «o» lógico. Evalúa dos condiciones y devuelve un valor de ver-
dad solo si una de las dos condiciones se cumple o ambas.
Sintaxis:
Sintaxis:
Sintaxis
Sintaxis
Operador Descripción
<= Menor o igual
< Menor
> Mayor
>= Mayor o igual
Entre los operadores de SQL, hay uno para comprobar si una expre-
sión está comprendida en un determinado rango de valores.
La sintaxis es:
Para mostrar los productos fuera del rango del ejemplo anterior, use
NOT BETWEEN
Sintaxis:
Sintaxis:
Función AVG
Esta Función es utilizada para calcular el promedio de los valores de
un campo determinado.
Sintaxis:
Función COUNT
Esta Función es utilizada para devolver el número de registros de la
selección.
Sintaxis
Función SUM
Utilizada para devolver la suma de todos los valores de un campo
determinado
Sintaxis
Función MAX
Esta Función es utilizada para devolver el valor más alto de un
campo especificado
Sintaxis:
Función MIN
Utilizada para devolver el valor más bajo de un campo especificado
Sintaxis:
Función STDDEV
Utilizada para devolver la desviación estándar de los valores de
un campo especificado. Generalmente para obtener datos esta-
dísticos
Sintaxis :
Función VAR
Utilizada para devolver la varianza de los valores de un campo espe-
cificado.
Sintaxis :
Función ASCII
Devuelve el valor de código ASCII del carácter más a la izquierda
de la cadena String. Devuelve 0 si String es una cadena vacía.
Sintaxis:
SELECT ASCII(cadena)
SELECT ASCII('A')
Función LEFT
Sintaxis:
LEFT(Cadena, numero_caracteres)
La parte más difícil cuando se trabaja con las fechas es estar seguro
de que el formato de la fecha en la que está intentando insertar, coin-
cide con el formato de la columna de la fecha en la base de datos.
Función Descripción
Ejemplos:
La siguiente instrucción SELECT:
Función Descripción
Resultado:
Dias_Trasncurridos
5
CAST
Puede usar dos formas equivalentes de sintaxis para convertir
expresiones de un tipo de dato a otro:
CONVERT
El CONVERT() la función es una función general que convierte una
expresión de un tipo de datos a otro.
El CONVERT() función se puede utilizar para mostrar los datos de
fecha / hora en formatos diferentes.
Sintaxis
CONVERT(data_type(length),expression,style)
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),10)
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),6)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)
Función Descripción
ABS(Exp. Numérica) Reporta el valor absoluto de una expresión numérica.
DEGREES(Exp. Numérica) Reporta el valor del ángulo en grados de uno expresado en
radianes.
RAND() Reporta un número aleatorio entre 0 y 1.
ACOS(Exp. Numérica) Reporta el ángulo en radianes llamado Arco Coseno.
EXP(Exp. Numérica) Reporta el valor exponencial de la expresión numérica.
ROUND(Exp. Numérica, n) Reporta una expresión numérica redondeada en n decimales.
ASIN(Exp. Numérica) Reporta el ángulo en radianes llamado Arco seno.
FLOOR(Exp. Numérica) Reporta el entero menor o igual que la expresión numérica
especificada.
SIGN(Exp. Numérica) Reporta el signo de la expresión numérica.
ATAN(Exp. Numérica) Reporta el ángulo en radianes llamado Arco Tangente.
LOG(Exp. Numérica [,base]) Reporta el logaritmo natural de una expresión numérica.
SIN(Exp. Numérica) Reporta el seno de un ángulo expresado en radianes.
ATN2(Exp. Numérica1, Devuelve el ángulo, en radianes, entre el eje x positivo y el
Exp. Numérica2) rayo desde el origen hasta el punto (y, x), donde x e y son los
valores de las dos expresiones flotantes especificadas.
LOG10(Exp. Numérica) Reporta el logaritmo en base 10 de la expresión numérica.
SQRT(Exp. Numérica) Reporta la raíz cuadrada de la expresión numérica
CEILING(Exp. Numérica) Reporta el entero más pequeño mayor o igual que la
expresión numérica especificada.
PI() Reporta el valor de Pi.
SQUARE(Exp. Numérica) Reporta el cuadrado de la expresión numérica
COS(Exp. Numérica) Reporta el ángulo en radianes llamado Coseno.
POWER(Exp. Numérica, n) Reporta la expresión numérica elevada a la n potencia.
TAN(Exp. Numérica) Reporta el ángulo en radianes llamado Tangente.
COT(Exp. Numérica) Reporta el ángulo en radianes llamado Cotangente.
RADIANS(Exp. Numérica) Reporta el valor en radianes de un ángulo especificado.
Ejemplos:
Calcular el valor en radianes de 2 PI()
SELECT nombre_columna(s)
FROM nombre_tabla
WHERE condicion
GROUP BY nombre_columna(s)
ORDER BY nombre_columna(s);
Sintaxis de ORDER BY
Sintaxis de HAVING
Eje_Titulo
Base de datos Organizacionales
Base de datos Organizacionales
Aplicaciones WEB Empresariales
Aplicaciones Web con JSF e Hibernate
Minería de Datos – Esquemas Expertos
Eje_Titulo
Base de datos Organizacionales
Aplicaciones WEB Empresariales
Aplicaciones Web con JSF e Hibernate
Minería de Datos – Esquemas Expertos
Obtendríamos lo siguiente:
II.5.Ejercicios propuestos
1. El promedio de Precios de venta de los Ejemplares.
2. El Precio más alto de los ejemplares.
3. El Precio más bajo de los ejemplares.
4. Ejemplares con Stock actualmente.
5. Valor total de los Ejemplares en Stock.
6. Monto total vendido en el año 2018 y la cantidad de Pedidos.
7. Cantidad de pedidos generados y monto total vendido al
Cliente con código 32658790.
8. Modificar la tabla ejemplares incluyendo un campo de tipo
entero para considerar si esta descontinuado o no.
9. Crear una tabla con los ejemplares descontinuados y luego
insertar los registros. Los ejemplares descontinuados son:
Eje_Id nchar(11), Eje_titulo nvarchar(50), Eje_Precio Nume-
ric(9,2), Eje_Stock Numeric(8,2).
10. Utilizar un select con la misma cantidad de campos para
inserta los registros.
11. Para visualizar los registros insertados.
12. Importante: note que el tipo de datos en la tabla Ejemplares-
Descontinuados para el campo Código es nchar(11) y la
tabla Ejemplares originalmente el tipo es numeric(11).
SENTENCIAS SQL
AVANZADAS
III.1. Consulta de Varias Tablas
JOIN
Ejemplo:
Si tenemos las siguientes tablas:
Edi Eje_
Eje_Id Eje_Titulo Aut_Id Tip_Id
_Id Cantidad
INNER JOIN
Base de datos
10 Adamaris Tapia Rosales
Organizacionales
Minería de Datos –
Luz Jacinto Heredia
Esquemas Expertos
LEFT JOIN
INSTRUCCIÓN MERGE
Sintaxis
La forma de usar Merge es la siguiente:
MERGE
[ TOP ( n ) [ PERCENT ] ]
[ INTO ] <Tabla_Destino> [ [ AS ] AliasTablaDestino ]
USING <Tabla_Origen> [ [ As ] AliasTablaOrigen]
ON <CondiciónMergeComparación>
[ WHEN MATCHED [ AND <Condición> ]
THEN <Isntrucción Si encuentra> ] [ …n ]
[ WHEN NOT MATCHED [ BY TARGET ] [ AND <Condición> ]
THEN <Instrucción Si NO Encuentra en Destino> ]
[ WHEN NOT MATCHED BY SOURCE [ AND <Condición> ]
THEN <Instrucción Si NO Encuentra en Origen> ] [ …n ]
Ejemplo
En este ejemplo se tienen dos bases de datos cada una con una
tabla de Productos.
La base de datos Antiguos, con la tabla ProductosAntiguos y la base
de datos Nuevos con la tabla ProductosNuevos.
Haciendo el Merge
La tabla Origen es Productos de la base de datos Nuevos y la tabla
Destino en Productos en la base de datos Antiguos.
UPDATE Tabla
SET Tabla.col1 = otra_tabla.col1,
Tabla.col2 = otra_tabla.col2
FROM Tabla
INNER JOIN otra_tabla
ON Tabla.id = otra_tabla.id
WHERE EXISTS(SELECT Tabla.Col1, Tabla.Col2
EXCEPT SELECT otra_tabla.Col1, otra_tabla.Col2))
Cuando nos topamos con esto, parece muy simple, pero cuando
intentamos pensar en la solución he visto a los desarrolladores idear
muchas soluciones diferentes. Por ejemplo, en algún momento
escriben cursor, variables de tabla, variables locales, etc. Sin
embargo, la más fácil y la más limpia. La forma es usar la cláusula
JOIN en la sentencia DELETE y usar varias tablas en la sentencia
DELETE y hacer la tarea.
BULK INSERT
Carga datos de un archivo de datos a una tabla. Esta funcionalidad
es parecida a la que ofrece la opción in del comando BCP, aunque el
que lee el archivo de datos es el proceso de SQL Server.
Sintaxis
Ejemplo
Vamos a importar datos desde un texto plano (TXT sin cabecera) a
la tabla Autores conociendo que tiene la siguiente estructura:
CONTROL DE DATOS
CON LÓGICA DE
USUARIO
IV.1. Procedimientos Almacenados
Un 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. Los procedimientos pueden ser ventajosos: cuando una base
de datos es manipulada desde muchos programas externos. (5)
Características:
· Tienden a mejorar el rendimiento de los sistemas debido a que
reducen el intercambio entre cliente y servidor.
· Los procedimientos almacenados son reutilizables, de manera
que los usuarios mediante la aplicación cliente no necesitan
relanzar los comandos individuales, sino que pueden llamar el
procedimiento para ejecutarlo en el servidor tantas veces como
sea necesario.
Utilidades:
· Por ejemplo, si deseamos obtener un reporte complejo que
incluya instrucciones condicionales y cálculos complejos con
datos obtenidos de varias tablas, un procedimiento almacena-
do es nuestro mejor aliado. También se pueden ejecutar com-
plejos procesos que a veces tardan horas cuando son ejecuta-
dos desde el cliente, ya que en tales casos la información debe
pasar del servidor al cliente y viceversa.
Sintaxis
Para crear un procedimiento almacenado debemos emplear la sen-
tencia CREATE PROCEDURE.
Nota: SET NOCOUNT Activar esta opción (el ON del final es lo que
la activa) equivale a decirle al servidor de base de datos que no que-
remos que nos devuelva le número de filas afectadas por las instruc-
ciones ejecutadas.
Luego para ejecutar el procedimiento debemos utilizar el comando
EXECUTE o EXEC en el caso del SQL Server.
EXECUTE sp_LstAutores;
CREATE PROCEDURE
sp_LstAutores_x_Nacionalidad_NroAutores
@Nacionalidad CHAR(3),@NroAutores INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @NroAutores=COUNT(*) FROM Autores
WHERE Nacionalidad=@Nacionalidad
RETURN;
END
MySQL
Oracle
MySQL
Oracle
IF… ELSE
IF <Expresion_Logica>
<Instruccion>
ELSE
<Instruccion>
WHILE
WHILE <Expresion_Logica>
BEGIN
<Grupo_Sentencia>
END
CASE
CASE <expresion>
WHEN <valor_expresion> THEN <valor_devuelto>
WHEN <valor_expresion> THEN <valor_devuelto>
ELSE <valor_devuelto>
END
Ejemplo
RETURN
Ejemplo:
LOOP
Sintaxis
[begin_label:] LOOP
statment_list
END LOOP [end_label]
LEAVE
Esta instrucción es utilizada para salir de alguna estructura de con-
trol. Puede ser usada dentro de un BEGIN ... END o dentro de algún
ciclo (Bucles).
Sintaxis
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
ITERATE label1;
END IF;
LEAVE label1; ---> Aquí rompemos un Bucle
END LOOP label1;
MANEJO DE EXCEPCIONES
En esta ocasión hablaremos acerca del manejo de excepciones en
transacciones de SQL Server
Una mejora importante que tenemos en SQL Server es el manejo de
errores que ahora es posible en T-SQL con los bloques TRY/CATCH
sin olvidar la sintaxis que utilizamos para las transacciones.
Sintaxis:
BEGIN TRY
BEGIN TRANSACTION
— Bloque de código SQL a proteger
COMMIT TRANSACTION
END TRY
BEGIN CATCH
— Código para mostrar el mensaje de la excepción
ROLLBACK TRANSACTION
END CATCH
COMMIT
Es la finalización de nuestro bloque de código y todas las instruccio-
nes dentro de él se llevarán a cabo siempre y cuando no se haya
generado error alguno.
ROLLBACK
Sirve para deshacer todos los movimientos realizados dentro del
bloque de la transacción del mismo nombre.
Ahora les mostraré un ejemplo, primero creamos una tabla de ejem-
plo en nuestro modelo:
Otro Ejemplo:
Usando la base de datos miKioskoVirtual, listar los registros de la
tabla Ventas, tenga en cuenta que la tabla no existe.
El select se incluirá en un procedimiento almacenado.
Use miKioskoVirtual
El procedimiento almacenado
BEGIN TRY
Execute spListaVentas
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS 'Nº Error',
ERROR_MESSAGE() AS 'Mensaje'
END CATCH
MANEJANDO ERRORES
Al usar el lenguage Transact-SQL debemos tener en cuenta, como en
cualquier lenguaje de programación, que algunas instrucciones nos
pueden dar errores debido a los valores de parámetros de entrada
incorrectos o faltantes, ingresos de datos con tipos incorrectos, falta
de datos en un procedimiento o función definida por el usuario o de
manera general en una transacción no finalizada de manera correcta.
Podemos citar algunas funciones para el manejo de errores en el
SQL Server, pues estas permiten conocer los parámetros que repor-
ta un error.
Función Descripción
Ejemplo
BEGIN TRY
DECLARE @Valor1 Numeric(9,2),@Valor2 Numeric(9,2),
@Division Numeric(9,2)
SET @Valor1 = 100
SET @Valor2 = 0
SET @Division = @Valor1/@Valor2
PRINT 'La división no reporta error'
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() As 'Nº de Error',
ERROR_SEVERITY() As 'Severidad',
ERROR_STATE() As 'Estado',
ERROR_PROCEDURE() As 'Procedimiento',
ERROR_LINE() As 'Nº línea',
ERROR_MESSAGE() As 'Mensaje'
END CATCH
LA FUNCIÓN @@ERROR
Ejemplo:
SQL Server tiene una vista de catálogo con los mensajes definidos
por defecto, la vista es sys.messages, a la cual se le pueden añadir
mensajes de error con sus parámetros respectivos usando el proce-
dimiento almacenado sp_addmessage.
El procedimiento sp_addmessage
Permite agregar un mensaje de error definido por el usuario a la
vista de catálogo sys.messages.
Sintaxis:
Donde:
[ @msgnum= ] msg_id Especifica el Id del mensaje, se pueden
iniciar en 50001, el valor máximo es 2,147,483,647.
[ @severity= ] severidad Indica el nivel de gravedad del error,
puede ser un valor entre 1 y 25.
[ @msgtext= ] 'mensaje' Especifica el mensaje definido por el
usuario.
[ @lang= ] 'languaje' Especifica el lenguaje.
Ejemplos:
Agregar el mensaje para indicar que un porcentaje de descuento
puede ser entre 0 y 25%.
Nota: Es necesario insertar el mensaje para el idioma inglés y así
poder agregar el mensaje para español.
Use master
go
Execute sp_addmessage 50001, 16, 'The discount per-
centage should be between 0 and 25%', 'us_english',
false, replace;
Execute sp_addmessage 50001, 16, 'El porcentaje de
descuento debe ser entre 0 y 25%', 'Spanish', false,
replace;
Use master
go
Execute sp_addmessage 50002, 16,
'The price should be 0 or greater', 'us_english' , false,
replace
Execute sp_addmessage 50002, 16,
'El precio debe ser 0 o mayor', 'Spanish' , false, replace
go
Sintaxis:
Donde:
[ @message_id = ] message_number Especifica el Id del mensaje
[ @parameter = ] 'write_to_log' Especifica si se va a escribir en el
log de Windows
[ @parameter_value = ] 'value' Se utiliza con @parameter para
indicar que el error debe escribirse en el registro de aplicación de
Microsoft Windows
Ejemplo
El siguiente ejemplo permite especificar que el mensaje de error
creado se escriba en el log de Windows.
Sintaxis:
Donde:
[ @msgnum = ] message_number Especifica el Id del mensaje
[ @lang = ] 'language' Especifica el lenguaje.
Ejemplo
El siguiente código elimina el mensaje creado con Id 50001
Para crear una función al igual que un procedimiento tiene una sinta-
xis:
Ejemplos:
Prueba:
SELECT 'Existen:' +
Ltrim(Str(dbo.fCategoriasCuenta()))+ ' categorías'
CREATE FUNCTION
dbo.fnStockxCategoria(@CodigoCategoria int)
RETURNS INT
AS
BEGIN
DECLARE @TotalStock INT
Prueba:
— Categoria 1
CREATE FUNCTION
dbo.fCantidadxClientexCiudad(@Ciudad nvarchar(20))
RETURNS Table
AS
RETURN SELECT C.Cli_Id As 'Código Cliente', CASE
C.Cli_Tipo WHEN 'N' THEN 'Natural' WHEN 'J' THEN
'Jurídico' END As 'Tipo Cliente', C.Cli_Ciudad,
SUM(DP.PED_Cantidad * DP.PED_PrecioVenta) As
Monto FROM Clientes As C
INNER JOIN Pedido As P
ON C.Cli_Id = P.Cli_Id
INNER JOIN DetallePedido As DP
ON P.Ped_Id=DP.Ped_Id
WHERE C.Cli_Ciudad= @Ciudad
GROUP BY C.Cli_Id, C.Cli_Tipo, C.Cli_Ciudad
— Pruebas
Exec spCantidadxClientesxPais 'Lima'
Tipos de Triggers
Consideraciones
· Una tabla puede tener un máximo de tres triggers: uno de
actualización, uno de inserción y uno de eliminación.
· Cada trigger puede aplicarse a una sola tabla o vista. Por otro
lado, un mismo trigger se puede aplicar a las tres acciones:
UPDATE, INSERT y DELETE.
· No se puede crear un trigger en una vista ni en una tabla tempo-
ral, pero el trigger puede hacer referencia a estos objetos.
· Los trigger no se permiten en las tablas del sistema.
Ejemplos
— Usando miKioskoVirtual
use miKioskoVirtual
BEGIN
Raiserror('NO PUEDE ELIMINAR MÁS DE UN
REGISTRO',16,1)
ROLLBACK Tran
END
Raiserror Raiserror('Mensaje',Severidad,Estado)
Insertar Categorías
Resultado:
Trigger de Inserción
Resultado:
Trigger Instead Of
Realizar acciones después de las instrucciones de un procedimien-
to o las escritas directamente por el usuario.
END
Y lo ejecutamos
Ejemplos
Usando la base de datos miKioskoVirtual
Resultado:
Resultado:
3. Trainer SQL. Manuales SQL Server. [Online].; 2018 [cited 2018 12 27.
Available from: h p://www.manualsqlserver.com.