Está en la página 1de 24

Taller de Base de Datos

orientada a Objetos

Vistas y procedimientos almacenados


con T-SQL
Transacciones
• Las transacciones agrupan un conjunto de una o más sentencias en una
sola unidad. Si cualquiera de las tareas falla, toda la transacción falla, lo
cual evita que se dañe la base de datos.
• Las transacciones se puede considerar como si compilara un conjunto de
líneas de programación.
• Una transacción comienza con la ejecución de una sentencia
SQL(UPDATE/INSERT/DELETE).
• Todas las sentencias subsecuentes hasta una sentencia COMMIT o
ROLLBACK se hacen parte de la transacción. La ejecución de una sentencia
COMMIT o ROLLBACK completan la transacción actual.
• COMMIT: si todas las sentencias son correctas en una sola transacción ,
todos los cambios se registran en la base de datos.
• ROLLBACK: el proceso de revertir cambios.
Transacciones
• La transacción mas simple en Microsoft SQL Server es una
sentencia de modificación de datos sencilla:
• UPDATE autores SET au_nombre=‘Juan‘ WHERE au_id='172-
32-1176’
• Es una transacción automática.
• El servidor SQL primero registra lo que va a hacer y luego
realiza la sentencia UPDATE actual.
• Finalmente, registra que se ha completado la sentencia
UPDATE.
• Si el servidor falla después de que la transacción se haya
registrado en la bitácora(log),SQL server utiliza el registro de
la transacción para reiniciarla al recuperarse.
Transacciones
Para ser de utilidad, las transacciones necesitan tener dos o más sentencias
en ellas.
A este tipo de transacciones se les llama explícitas:
BEGIN TRAN
UPDATE autores SET nombre=‘Juan'
WHERE id='172-32-1176'
UPDATE autores SET nombre=‘Luis'
WHERE id='213-46-8915'
COMMIT TRAN
Nota: las sentencias BEGIN TRAN y COMMIT TRAN comienzan y completan
una transacción. Todo lo que se encuentre dentro de estas transacciones se
consideran como una unidad lógica de trabajo. Si cualquiera sentencia en la
transacción falla, no cambiará nada en la base de datos.
Transacciones
Una transacción se puede cancelar si no hace lo que se esperaba:
BEGIN TRAN
UPDATE autores SET nombre = ‘Juan' WHERE au_id= '172-32-1176'
UPDATE autores SET nombre = 'Juana' WHERE ciudad= ‘Monterrey'
IF @@ROWCOUNT = 10 COMMIT TRAN
ELSE
ROLLBACK TRAN
Nota: Si @@ROWCOUNT (una función SQL) es igual a 10, entonces la
transacción se lleva a cabo, de lo contrario se cancela. La sentencia ROLLBACK
TRAN “deshace” todo el trabajo desde la sentencia BEGIN TRAN. Ninguno de
las sentencias UPDATE se llevan a cabo.
Vistas
• Las vistas son consultas almacenadas (tablas
lógicas). Aunque también se pueden definir
física
• Una vista es una tabla virtual que muestra los
datos de una o varias tablas seleccionadas.
Vistas
Ventajas de las vistas
•Una vista se puede concebir como una consulta
almacenada.
• Los datos accesibles a través de la vista no se
almacenan en la base de datos como un objeto
definido.
Vistas
Ventajas de las vistas
•Lo que se almacena en la base de datos es una
sentencia SELECT. El resultado del conjunto de
sentencias SELECT forman la tabla virtual.
• La tabla virtual se accede al referenciar el
nombre de la vista en sentencias T-SQL como se
indica a continuación:
SELECT * from <Nombre de la vista>
Where <condición = x>
Vistas
¿cómo se puede utilizar una vista?
Una vista se puede utilizar para restringir
información en lugar de proporcionar detalles.
Por ejemplo, puede mostrar a suma de una
columna o el valor máximo o mínimo de una
columna.
Vistas
Aunque una vista es un nombre almacenado para una declaración SELECT, el
SELECT definido para la vista puede hacer referencia a otras tablas, vistas y
funciones. La declaración SELECT no puede:

•Contener las cláusulas COMPUTE o COMPUTE BY


•Usar la palabra clave INTO
•Usar una cláusula OPTION
•Hacer referencia a una tabla temporal o variable o cualquier otro tipo.
•Contener una cláusula ORDER BY a menos que se especifique un operador
TOP
La vista puede contener varias declaraciones SELECT, siempre y cuando usted
utilice los operadores UNION
o UNION ALL.
Vistas
Sintaxis para crear una vista

CREATE VIEW[ < nombreBD> . ] [ < propietario> .


] nombre[ ( campo[ ,...n ] ) ]
[ WITH<view_attribute> [ ,...n ] ]
AS
Instrucción_Select[ WITH CHECK OPTION ]
Vistas
• nombreBD: es el nombre de la base de datos en la
que se crea.
• propietario: cuenta de usuario que crea la vista
• nombre: es el nombre de la vista que se va a crear.
• campo: es el nombre que se va a utilizar para una
columna en una vista.
• instrucción_Select: consulta a través de la cuál se
define la vista
Vistas
• view_attribute: toma uno de los siguientes valores
• [ ENCRYPTION ]: evita que la vista se publique como parte de la
réplica de SQL Server
• [ SCHEMABINDING ]: enlaza la vista al esquema de las tablas
subyacentes. Cuando se especifica, las tablas base no se pueden
modificar de una forma que afecte a la definición de la vista.
• [ VIEW_METADATA ]: Especifica que la instancia de SQL Server
devolverá a las API de DB-Library, ODBC y OLE DB la información de
metadatos sobre la vista en vez de las tablas base.
• [ WITH CHECK OPTION ] : Exige que todas las instrucciones de
modificación de datos ejecutadas contra la vista adhieran a los
criterios establecidos en la instrucción Select.
Vistas
Ejemplo de vista
CREATE VIEW graduados AS
SELECT id_alumno, nombre_alumno
FROM alumnos_inscritos

El código anterior crea una tabla virtual llamada


graduados que contiene los datos de identificación del
alumno y su nombre. Los datos se obtienen de la
tabla alumnos_inscritos.
Procedimientos y funciones
almacenados
Los procedimientos son una colección de
instrucciones de Transact-SQL
(o una referencia a un método de Common
Language Runtime (CLR) de Microsoft .NET
Framework) que pueden aceptar y devolver
parámetros proporcionados por el usuario.
Un función almacenada es una rutina con
instrucciones T-SQL (o de Common Language
Runtime) que devuelve un valor o una tabla.
Procedimientos y funciones
almacenados
Diferencias:
•Las funciones no se pueden utilizar para realizar
acciones que modifican el estado de la base de
datos. Los procedimientos sí.
•Las funciones se pueden combinar con
instrucciones SELECT. Los procedimientos no.
Procedimientos y funciones
almacenados
Ventajas de usar procedimientos y funciones
versus scripts SQL son:
•Mejor rendimiento al estar compilados y
almacenados en la base de datos.
•Mejor gestión de la memoria.
•Mayor productividad e integridad.
•Facilidad para gestionar la seguridad.
Procedimientos almacenados
Sintaxis
CREATE PROC [ EDURE ] nombre
[ { @parametros tipo_dato }
[ = valor_por_defecto ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE ,
ENCRYPTION } ]
[ FOR REPLICATION ]
AS instrucciones_sql [ ...n ]
Procedimientos almacenados
• nombre: es el nombre del procedimiento que
se va a crear.
• parámetros: parámetros de entrada y salida
del procedimiento
• tipo_dato: tipo de dato asociado al
parámetro.
• valor_por_defecto: valor asignado por defecto
al parámetro
• instrucciones_sql: instrucciones SQL
Procedimientos almacenados
Ejemplo
CREATE PROCEDURE dameProveedores AS
SELECT rut_prov, nombre, direccion,ciudad, fono
FROM Proveedor;
Go
exec dameProveedores;
Procedimientos almacenados
CREATE PROCEDURE upd_precio_articulo @ipc numeric(3,2) AS
BEGIN TRANSACTION
update articulos set preunart = preunart + (preunart*@ipc/100)
where preunart is not null
if @@ERROR <> 0 Variable de SQL Server donde
recoge el nº de error. Valor 0
begin indica no se ha producido error
ROLLBACK TRANSACTION
RAISERROR ( 'No se han modificado los precios’,16,1)
RETURN
end
COMMIT TRANSACTION
Go
Procedimientos almacenados
La mayoría de las transacciones de usuarios ocurren en
procedimientos almacenados.
Create Procedure TranTest2 AS
BEGIN TRAN
INSERT INTO autores(id,anombre, nombre, tel,contrato) VALUES ('123-
321176', Perez', Juan', ‘45234333', 1)
IF @@ERROR <> 0 BEGIN ROLLBACK TRAN return 10 END
UPDATE autores SET nombre = 'John' WHERE id = '172-32-1177’
IF @@ERROR <> 0 BEGIN ROLLBACK TRAN return 11 END
COMMIT TRAN
GO
Procedimientos almacenados
Gestión de errores
Siempre es deseable que las instrucciones del procedure esten
dentro de un bloque TRY CATCH y controlados por una
transacción.
Procedimientos almacenados
BEGIN TRY
BEGIN TRANSACTION
update articulos set preunart = preunart + (preunart*@ipc/100)
where preunart is not null
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
RAISERROR ( 'No se han modificado los precios’,16,1)
END CATCH
exec upd_precio_articulo 3.2

También podría gustarte