Upload
brobelo
View
25.713
Download
0
Embed Size (px)
DESCRIPTION
Tablas Vistas Store Procedures Triggers Constraint http://bernardorobelo.blogspot.com/
Citation preview
Desarrollo Aplicaciones con SQL Server 2005
Ing. BARJ - 2008
PROCEDIMIENTOSPROCEDIMIENTOS
FUNCIONES DE USUARIOFUNCIONES DE USUARIO
VISTASVISTAS
INTEGRIDAD DE DATOSINTEGRIDAD DE DATOS
TRIGGERSTRIGGERS
CURSORESCURSORES
AGENDA
TRANSACT - SQLTRANSACT - SQL
INDICESINDICES
Ing. BARJ – 2008
Transact-SQL
¿Que es?
Ing. BARJ – 2008
Transact-SQL
Lenguaje de Definición De Datos
Ing. BARJ – IST – UPOLI - 2008
Tipos de datos del sistema
• Numérico– Entero– Numérico exacto– Numérico aproximado– Moneda
• Fecha y hora• Carácter y caracteres Unicode• Binario• Otros
Ing. BARJ – IST – UPOLI - 2008
• ¿Qué son ?
• ¿Pará que se utilizan?
Tipos de datos definidos por el usuario
Ing. BARJ – IST – UPOLI - 2008
Tipos de datos definidos por el usuario
– Los tipos de datos definidos por el usuario están basados en los tipos de datos disponibles a través de SQL Server 2005.
– Los tipos de datos definidos por el usuario se pueden emplear para asegurar que un dato tenga las mismas características sobre múltiples tablas.
Ing. BARJ – IST – UPOLI - 2008
Implementación de la integridad de datos
Ing. BARJ – IST – UPOLI - 2008
¿Que es la integridad de datos?
Ing. BARJ – IST – UPOLI - 2008
Tipos de integridad de datos
Integridad de dominio (columnas)
Integridad de entidad (filas)
Integridad referencial(entre tablas)
Ing. BARJ – IST – UPOLI - 2008
Exigir integridad de los datos
• Integridad de datos declarativa– Los criterios se definen en la definición del objeto– Asegurada automáticamente por SQL Server– Implementada mediante restricciones, valores predeterminados y reglas
• Integridad de datos procedimental– Los criterios se definen en una secuencia de comandos– Asegurada mediante secuencia de comandos– Implementada mediante desencadenadores y procedimientos almacenados
Ing. BARJ – IST – UPOLI - 2008
Integridad de datos
Ing. BARJ – IST – UPOLI - 2008
Determinación del tipo de restricción que se va a utilizar
Tipo de integridadTipo de integridadTipo de integridadTipo de integridad Tipo de restricciónTipo de restricciónTipo de restricciónTipo de restricción
DominioDominioDEFAULTDEFAULT
CHECKCHECK
REFERENTIALREFERENTIAL
EntidadEntidad PRIMARY KEYPRIMARY KEY
UNIQUEUNIQUE
ReferencialReferencial FOREIGN KEYFOREIGN KEY
CHECKCHECK
Tipos de restricciones
• Restricciones DEFAULT• Restricciones CHECK• Restricciones PRIMARY KEY• Restricciones UNIQUE• Restricciones FOREIGN KEY• Integridad referencial en cascada
Ing. BARJ – IST – UPOLI - 2008
¿Qué es un Indice¿Qué es un Indice
Tipos de Indice
Ing. BARJ – IST – UPOLI - 2008
• CLUSTERED INDEX• Por Defecto se crean indices con las Llaves Primarias• Son como capitulos en el Libro• Indice como la guia telefonica• Mantiene juntas los numeros de Lineas
• NON-CLUSTERED INDEX• Son como guiones para acceder a los datos• Utilizado en llaves de varios campos• Es el Indice o Glosario• Son Atajos para acceder a los Datos
Ing. BARJ – IST – UPOLI - 2008
¿Qué es una Vista?¿Qué es una Vista?
Ing. BARJ – IST – UPOLI - 2008
Introducción a las vistas
EmployeeViewEmployeeViewEmployeeViewEmployeeView
Lastname Lastname Firstname Firstname
Davolio Fuller Leverling
Davolio Fuller Leverling
Nancy Andrew Janet
Nancy Andrew Janet
EmployeesEmployeesEmployeesEmployees
EmployeeIDEmployeeID LastName LastName FirstnameFirstname TitleTitle
123
123
DavolioFullerLeverling
DavolioFullerLeverling
NancyAndrewJanet
NancyAndrewJanet
~~~~~~~~~
~~~~~~~~~
Vista del usuarioVista del usuario
USE NorthwindGOCREATE VIEW dbo.EmployeeViewAS SELECT LastName, FirstnameFROM Employees
USE NorthwindGOCREATE VIEW dbo.EmployeeViewAS SELECT LastName, FirstnameFROM Employees
Ing. BARJ – IST – UPOLI - 2008
Ventajas de las vistas
• Centrar el interés en los datos de los usuarios– Centrarse sólo en los datos importantes o adecuados– Limitar el acceso a los datos confidenciales
• Enmascarar la complejidad de la base de datos– Ocultar el diseño de la base de datos compleja– Simplificar las consultas complejas, incluyendo las consultas distribuidas
a datos heterogéneos
• Simplificar la administración de los permisos de usuario• Mejorar el rendimiento• Organizar los datos para exportarse a otras aplicaciones
Ing. BARJ – IST – UPOLI - 2008
Ejemplo: Vista de tablas combinadas
OrderIDOrderIDOrderIDOrderID
1066310827104271045110515
1066310827104271045110515
CustomerIDCustomerIDCustomerIDCustomerID
BONAP BONAP PICCO QUICKQUICK
BONAP BONAP PICCO QUICKQUICK
~~~ ~~~ ~~~ ~~~ ~~~
~~~ ~~~ ~~~ ~~~ ~~~
RequiredDateRequiredDateRequiredDateRequiredDate
1997-09-241998-01-261997-02-241997-03-051997-05-07
1997-09-241998-01-261997-02-241997-03-051997-05-07
ShippedDateShippedDateShippedDateShippedDate
1997-10-031998-02-061997-03-031997-03-121997-05-23
1997-10-031998-02-061997-03-031997-03-121997-05-23
Orders Customers
ShipStatusViewUSE NorthwindGOCREATE VIEW dbo.ShipStatusViewASSELECT OrderID, ShippedDate, ContactNameFROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerIDWHERE RequiredDate < ShippedDate
USE NorthwindGOCREATE VIEW dbo.ShipStatusViewASSELECT OrderID, ShippedDate, ContactNameFROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerIDWHERE RequiredDate < ShippedDate
CustomerIDCustomerIDCustomerIDCustomerID
BONAPPICCOQUICK
BONAPPICCOQUICK
CompanyNameCompanyNameCompanyNameCompanyName
Bon app'Piccolo und mehrQUICK-Stop
Bon app'Piccolo und mehrQUICK-Stop
ContactNameContactNameContactNameContactName
Laurence LebihanGeorg PippsHorst Kloss
Laurence LebihanGeorg PippsHorst Kloss
OrderIDOrderIDOrderIDOrderID
102641027110280
102641027110280
1996-08-211996-08-291996-09-11
1996-08-211996-08-291996-09-11
ShippedDateShippedDateShippedDateShippedDate
1996-08-231996-08-301996-09-12
1996-08-231996-08-301996-09-12
ContactNameContactNameContactNameContactName
Laurence LebihanGeorg PippsHorst Kloss
Laurence LebihanGeorg PippsHorst Kloss
Ing. BARJ – IST – UPOLI - 2008
Uso de vistas para dividir datos
• Puede utilizar las vistas para dividir los datos en varios servidores o instancias de SQL Server
• Cómo utiliza SQL Server las vistas para dividir datos• Cómo las vistas divididas mejoran el rendimiento• NO SE PUEDE
– No se puede incluir la cláusula ORDER BY– No se puede incluir la palabra clave INTO
Ing. BARJ – IST – UPOLI - 2008
Práctica: Implementación de vistas
Ing. BARJ – IST – UPOLI - 2008
Práctica: Implementación de vistas
Ing. BARJ – IST – UPOLI - 2008
¿Qué es un ¿Qué es un procedimiento almacenado?procedimiento almacenado?
Ing. BARJ – IST – UPOLI - 2008
Definición de procedimientos almacenados
• Colecciones con nombre de instrucciones Transact-SQL• Encapsulado de tareas repetitivas• Aceptar parámetros de entrada y devolver valores
Ing. BARJ – IST – UPOLI - 2008
Ventajas de los procedimientos almacenados
• Compartir la lógica de la aplicación• Exposición de los detalles de las tablas de la
base de datos• Proporcionar mecanismos de seguridad• Mejorar el rendimiento• Reducir el tráfico de red
Ing. BARJ – IST – UPOLI - 2008
Creación de procedimientos almacenados
• Utilice la instrucción CREATE PROCEDURE para crearlos en la base de datos activa
• Puede anidar hasta 32 niveles• Use sp_help para mostrar información
USE NorthwindGOCREATE PROC dbo.OverdueOrdersAS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS NullGO
Ing. BARJ – IST – UPOLI - 2008
Ejecución de procedimientos almacenados
• Ejecución de un procedimiento almacenado por separado
• Ejecución de un procedimiento almacenado en una instrucción INSERT
EXEC OverdueOrders
INSERT INTO CustomersEXEC EmployeeCustomer
Ing. BARJ – IST – UPOLI - 2008
Ejecución de procedimientos• Paso de valores por el nombre del parámetro
• Paso de valores por posición
EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'
EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'
EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'
EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'
Ing. BARJ – IST – UPOLI - 2008
Devolución de valores mediante parámetros de salida
CREATE PROCEDURE dbo.mathtutor@m1 smallint,
@m2 smallint,@result smallint OUTPUT
AS SET @result = @m1* @m2GODECLARE @answer smallintEXECUTE mathtutor 5, 6, @answer OUTPUTSELECT 'The result is: ' , @answer
The result is: 30
CREATE PROCEDURE dbo.mathtutor@m1 smallint,
@m2 smallint,@result smallint OUTPUT
AS SET @result = @m1* @m2GODECLARE @answer smallintEXECUTE mathtutor 5, 6, @answer OUTPUTSELECT 'The result is: ' , @answer
The result is: 30
Resultados del Resultados del procedimientoprocedimientoalmacenadoalmacenado
Resultados del Resultados del procedimientoprocedimientoalmacenadoalmacenado
Ejecución del Ejecución del procedimiento procedimiento almacenadoalmacenado
Ejecución del Ejecución del procedimiento procedimiento almacenadoalmacenado
Creación del Creación del procedimiento procedimiento almacenadoalmacenado
Creación del Creación del procedimiento procedimiento almacenadoalmacenado
Ing. BARJ – IST – UPOLI - 2008
Control de mensajes de error
• La instrucción RETURN sale incondicionalmente de una consulta o procedimiento
Ing. BARJ – IST – UPOLI - 2008
Práctica Procedimientos Almacenados
Ing. BARJ – IST – UPOLI - 2008
PROCEDIMIENTOS CON PARÁMETROS
Ing. BARJ – IST – UPOLI - 2008
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS CON VALORES POR DEFECTO
Ing. BARJ – IST – UPOLI - 2008
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS CON VALORES POR DEFECTO
Ing. BARJ – IST – UPOLI - 2008
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS CON VALORES POR DEFECTO
Ing. BARJ – IST – UPOLI - 2008
Ing. BARJ – IST – UPOLI - 2008
VARIABLES DE SALIDA EN PROCEDIMIENTOS ALMACENADOS
Ing. BARJ – IST – UPOLI - 2008
VARIABLES DE SALIDA EN PROCEDIMIENTOS ALMACENADOS
Ing. BARJ – IST – UPOLI - 2008
Ejemplos
Ing. BARJ – IST – UPOLI - 2008
Ejemplos
Ing. BARJ – IST – UPOLI - 2008
¿Qué es una función definida por el usuario?
Ing. BARJ – IST – UPOLI - 2008
¿Qué es una función definida por el usuario?
Una función de usuario, se crea con el fin de automatizar una consulta que se realiza a menudo.
• Funciones escalares– Similar a una función integrada
• Funciones con valores de tabla de varias instrucciones– Contenido como un procedimiento almacenado– Se hace referencia como una vista
• Funciones con valores de tabla en línea– Similar a una vista con parámetros– Devuelve una tabla como el resultado de una instrucción SELECT
única
Ing. BARJ – IST – UPOLI - 2008
Uso de una función escalar definida por el usuario
• La cláusula RETURNS especifica el tipo de datos• La función se define en un bloque BEGIN y END• El tipo de devolución puede ser cualquier tipo de datos, excepto
text, ntext, image, cursor o timestamp
Ing. BARJ – IST – UPOLI - 2008
Demostracion: Creación de funciones definidas por el usuario
Ing. BARJ – IST – UPOLI - 2008
FUNCIONES DEFINIDAS POR EL USUARIO
Declare Table
Ing. BARJ – IST – UPOLI - 2008
Funciones Escalares
Veamos en el Enteprise Manager, la funcion creada, consultamos el apartado “Funciones definidas por el usuario”
Ing. BARJ – IST – UPOLI - 2008
Funciones de Tablas en Linea
Ing. BARJ – IST – UPOLI - 2008
Funciones de Tablas Con Instrucciones
Ing. BARJ – IST – UPOLI - 2008
Funciones con Definicion de Esquema
Ing. BARJ – IST – UPOLI - 2008
Práctica: Creación de funciones definidas por el usuario
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
Ver Solución
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
Solución
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
Ing. BARJ – IST – UPOLI - 2008
Ejercicios
Ing. BARJ – IST – UPOLI - 2008
¿Que es un TRIGGER? (DESENCADENADORES, DISPARADORES)
Ing. BARJ – IST – UPOLI - 2008
¿Qué es un desencadenador?
• Un desencadenador es una clase especial de procedimiento almacenado que se ejecuta siempre que se intenta modificar los datos de una tabla que el desencadenador protege.
• Asociación a una tabla• Invocación automática• Imposibilidad de llamada directa• Identificación con una transacción
Ing. BARJ – IST – UPOLI - 2008
Consideraciones acerca del uso de desencadenadores
• Los desencadenadores son reactivos, mientras que las restricciones son proactivas
• Las restricciones se comprueban antes• Las tablas pueden tener varios desencadenadores
para cualquier acción• Comparación del estado de los datos antes y después de su
modificación
Ing. BARJ – IST – UPOLI - 2008
Funcionamiento de los desencadenadores anidados
2 15
UnitsInStock + UnitsOnOrder es < ReorderLevel para ProductID 2
OrDe_UpdateOrDe_Update
La realización de un pedido provoca la ejecución del desencadenador OrDe_Update
Se ejecuta la instrucción UPDATE en la tabla Products
InStock_UpdateInStock_Update ProductsProductsProductsProducts
ProductIDProductID UnitsInStockUnitsInStock …… ……
1
34
1
34
15156520
15156520
Se ejecuta el desencadenador InStock_Update
Envía un mensaje
Order_DetailsOrder_DetailsOrder_DetailsOrder_Details
OrderIDOrderID
105221052310524
105221052310524
ProductIDProductID
10417
10417
UnitPriceUnitPrice
31.009.6530.00
31.009.6530.00
QuantityQuantity
7924
7924
DiscountDiscount
0.20.150.0
0.20.150.0
10525 19.002 0.25
2 15
Ing. BARJ – IST – UPOLI - 2008
Desencadenadores recursivos
• Activación recursiva de un desencadenador• Tipos de desencadenadores recursivos
– Recursividad directa, que se da cuando un desencadenador se ejecuta y realiza una acción que lo activa de nuevo
– Recursividad indirecta, que se da cuando un desencadenador se activa y realiza una acción que activa un desencadenador de otra tabla
• Conveniencia del uso de los desencadenadores recursivos
Ing. BARJ – IST – UPOLI - 2008
ProductsProductsProductsProducts
ProductIDProductID UnitsInStockUnitsInStock …… ……
1234
1234
15106520
15106520
Exigir reglas de empresa
Los productos con pedidos pendientes no se pueden eliminar
IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = deleted.ProductID ) > 0ROLLBACK TRANSACTION
IF (Select Count (*) FROM [Order Details] INNER JOIN deleted ON [Order Details].ProductID = deleted.ProductID ) > 0ROLLBACK TRANSACTION
La instrucción DELETE se ejecuta en la tabla Product
El código del desencadenadorcomprueba la tabla Order Details
Order DetailsOrder DetailsOrder DetailsOrder Details
OrderIDOrderID
10522105231052410525
10522105231052410525
ProductIDProductID
102417
102417
UnitPriceUnitPrice
31.0019.009.6530.00
31.0019.009.6530.00
QuantityQuantity
7924
7924
DiscountDiscount
0.20.150.0
0.20.150.0
9
'No puede procesarse la transacción''Este producto tiene historial de pedidos'
'No puede procesarse la transacción''Este producto tiene historial de pedidos'
Se deshacela transacción
ProductsProductsProductsProducts
ProductIDProductID UnitsInStockUnitsInStock …… ……
1
34
1
34
15106520
15106520
2 0
Ing. BARJ – IST – UPOLI - 2008
Consideraciones acerca del rendimiento
• Los desencadenadores trabajan rápidamente porque las tablas insertadas y eliminadas están en la caché
• El tiempo de ejecución está determinado por:– Número de tablas a las que se hace referencia– Número de filas afectadas
• Las acciones contenidas en un desencadenador forman parte de una transacción
Ing. BARJ – IST – UPOLI - 2008
Demostracion: TRIGGERS (DESENCADENADORES, DISPARADORES)
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
Ing. BARJ – IST – UPOLI - 2008
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
Ing. BARJ – IST – UPOLI - 2008
TRIGGERS
Ing. BARJ – IST – UPOLI - 2008
Ing. BARJ – IST – UPOLI - 2008
CONCLUSIONES GENERALES
Ing. BARJ – IST – UPOLI - 2008
MUCHAS GRACIAS!
Ing. Bernardo RobeloIng. Bernardo Robelo
http://bernardorobelo.blogspot.com
Ing. BARJ – IST – UPOLI - 2008
Ing. BARJ – IST – UPOLI - 2008
Ing. BARJ – IST – UPOLI - 2008