You are on page 1of 29

Universidad Nacional De Ingeniera

Facultad Ingeniera Industrial y de Sistemas

Taller de Herramientas de
Software : ST 213
SESION SEMANA12

STORE PROCEDURE
TRANSACTION
TEMAS DE INVESTIGACION GRUPAL
Docente: Ing. Ysabel Rojas

REPASO ANTERIOR

Ejecutando Querys en SQL


Server Management Studio

FUNDAMENTOS DE UNION
DE DATOS (JOIN)

OPERADORES COMUNES
DE UNION

UNIENDO DATOS USANDO


INNER JOIN

UNIENDO DATOS USANDO


OUTER JOIN

STORE PROCEDURES

STORE PROCEDURES

STORE PROCEDURES

STORE PROCEDURES

Los procedimientos almacenados son


conjuntos de sentencias en lenguaje
Transact SQL que pueden almacenarse en
el propio servidor.
Permiten almacenar funciones y
procedimientos compuestos por varias
instrucciones, introducir saltos, bucles, etc.

EJEMPLO 1 - STORE
PROCEDURE
Crear un procedimiento para recuperar el
nombre de un Cliente, cuyo cdigo se pasa por
Parmetro (Ref Base de datos Northwind).
CREATE PROCEDURE ObtenerNombre
@CustomerID varchar(11) AS
SELECT COMPANYNAME
FROM CUSTOMERS
WHERE CustomerID = @CustomerID

EJEMPLO 1 - STORE
PROCEDURE
En este ejemplo para recuperar el nombre del cliente
cuyo cdigo sea '8011', deberemos ejecutar el procedimiento
pasndole como argumento este valor:
Las llamadas al procedimiento almacenado ya creado se puede
realizar de las siguientes formas
1) Pasando los argumentos en el mismo orden que en el que se
han declarado
Exec ObtenerNombre Anton'
esta sentencia produce la siguiente la salida
2) Pasando los argumentos nombrados. En este caso no hace
falta que los parmetros vayan en el mismo orden.
OBTENERNOMBRE @AU_ID = 'ANTON

STORE PROCEDURESOUTPUT
USO DE OUTPUT: PARMETROS POR REFERENCIA
Al ejecutar las anteriore sentencias, se obtiene el
resultado directamente en la ventana que se tenga
abierta en SQL Server.
Si se quiere obtener un parmetro de salida, como
resultado de la ejecucin del procedimiento, la
solucin para este caso es utilizar la palabra
reservada OUTPUT para los argumentos de salida.

EJEMPLO 2 - STORE
PROCEDURES
Se quiere obtener el nmero de clientes y el nmero de productos
que se tiene en la base de datos crear el procedimiento
almacenado y las instrucciones de ejecucin.

CREATE PROCEDURE num_clientes_productos @clientes int


OUTPUT, @Productos int OUTPUT AS
SELECT * FROM clientes
SELECT @clientes = @@ROWCOUNT
SELECT FROM productos
SELECT @productos = @@ROWCOUNT
RETURN (0)
**** @@ROWCOUNT devuelve el nmero de filas que se han
seleccionado. Es equivalente a la sentencia que aparece como
SELECT COUNT(*) FROM Productos

EJEMPLO 2 - STORE
PROCEDURES
Para ejecutar el anterior procedimiento, seguiremos los siguientes pasos:
1) Declarar las variables que vamos a utilizar para llamar al procedimiento.
La sintaxis para declarar una variable es utilizar la palabra reservada
DECLARE, seguido del nombre de la variable y el tipo.

DECLARE @num_clientes int


DECLARE @num_Productos int

2) Ejecutar el procedimiento. La sintaxis es utilizar la palabra reservada


EXEC, seguida del nombre del procedimiento, y los parmetros,
separados por comas, especificando si son de retorno.
EXEC num_clientes_productos @num_clientes OUTPUT,
@num_productos OUTPUT
3) Mostrar los resultados
SELECT clientes = @num_clientes, productos = @num_productos
Tras ejecutar las anteriores sentencias, obtendremos como resultado el
siguiente listado:

S P del sistema

S P del sistema
sp_who
obtendremos una lista con todos los usuarios conectados,

sp_tables
Lista con todas las tablas del sistema

sp_columns
Para conocer todos los atributos de una tabla, deberemos
ejecutar sp_columns seguido del nombre de la tabla.

Por ejemplo, para listar los atributos de la tabla Categorias


ejecutamos
sp_columns Categorias

TRANSACTIONS

TRANSACCIONES EN SQL
Una transaccin es un conjunto de operaciones
que van a ser tratadas como una nica unidad
La transaccin ms simple en SQL Server es una
nica sentencia SQL. Por ejemplo

UPDATE PRODUCTOS SET PRECIOUNIDAD=20


WHERE NOMBREPRODUCTO =QUESO LAIVE

Esta es una transaccin autocommit, una transaccin


autocompletada.

CARACTERISTICAS DE UNA
TRANSACCION

TRANSACTIONS

La sentencia que se utiliza para indicar el comienzo


de una transaccin es BEGIN TRAN. Si alguna de
las operaciones de una transaccin falla hay que
deshacer la transaccin en su totalidad para volver
al estado inicial en el que estaba la base de datos
antes de empezar. Esto se consigue con la
sentencia ROLLBACK TRAN.
Si todas las operaciones de una transaccin se
completan con xito hay que marcar el fin de una
transaccin para que la base de datos vuelva a
estar en un estado consistente con la sentencia
COMMIT TRAN.

BLOQUEOS

TRANSACCIONES
EXPLICITAS

CONSIDERACIONES EN EL
USO DE TRANSACCIONES

TRANSACTIONS

Un ejemplo Trabajaremos con la base


de datOS SUPERMERCADOSABC y
vamos a realizar una transaccin que
modifica el precio de dos productos de
la base de datos.

EJEMPLO DE
TRANSACTIONS
USE SUPERMERCADOS abc
DECLARE @Error int
--Declaramos una variable que utilizaremos para almacenar un posible cdigo de error
BEGIN TRAN
--Iniciamos la transaccin
UPDATE Productos SET PrecioUnidad=2.5 WHERE NombreProducto =Queso de cabra
--Ejecutamos la primera sentencia
SET @Error=@@ERROR
--Si ocurre un error almacenamos su cdigo en @Error
--y saltamos al trozo de cdigo que deshara la transaccin. Si, eso de ah es un
--GOTO, el demonio de los programadores, pero no pasa nada por usarlo
--cuando es necesario
IF (@Error<>0) GOTO TratarError
--Si la primera sentencia se ejecuta con xito, pasamos a la segunda
UPDATE Productos SET PrecioUnidad=2.5 WHERE NombreProducto=Queso de cabra
SET @Error=@@ERROR
--Y si hay un error hacemos como antes
IF (@Error<>0) GOTO TratarError
--Si llegamos hasta aqu es que los dos UPDATE se han completado con
--xito y podemos guardar la transaccin en la base de datos
COMMIT TRAN
TratarError:
--Si ha ocurrido algn error llegamos hasta aqu
If @@Error<>0 THEN
BEGIN
PRINT Ha ecorrido un error. Abortamos la transaccin
--Se lo comunicamos al usuario y deshacemos la transaccin
--todo volver a estar como si nada hubiera ocurrido
ROLLBACK TRAN
END

Subconsultas Y Funciones II

Ver THS10 y ejercicios

Muchas Gracias!

You might also like