Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 31

TECNOLÓGICO NACIONAL DE

MÉXICO
Instituto Tecnológico Superior de Guasave
Ingeniería en Sistemas Computacionales
Taller de Base de Datos
Unidad V: TSQL Procedural
TALLER DE BASE DE DATOS

Competencia: Aplicar mecanismos de SQL procedural como


mecanismo de actualización y auditoria de una base de datos.
TALLER DE BASE DE DATOS
SQL Procedural

¿Qué es SQL Procedural? Son un conjunto de sentencias de T-SQL los cuales son
guardados en un archivo fuente y almacenados en el SQL Server, para ser
convocados posteriormente por medio de Queries o desde una aplicación que
se conecta al SQL Server.

Existen dos tipos básicos:

• Procedimientos Almacenados (Stored Procedures)


• Disparadores (Triggers)
TALLER DE BASE DE DATOS

• Procedimientos Almacenados (SP): Los SP por sus siglas en inglés son un


conjunto de procedimientos almacenados físicamente en una base de datos
(de ahí su nombre). Estos pueden ser llamados por una aplicación externa, un
trigger, e incluso desde otro SP.

• La implementación de un SP varía de un SGBD a otro. La mayoría lo soportan


de alguna forma. Dependiendo del SGBD, los SP pueden ser implementados
por varios lenguajes de programación, tales como SQL, Java, C y C++.
TALLER DE BASE DE DATOS
• La creciente adopción de los SP llevó a la introducción de elementos
procedurales en el propio estándar SQL. La mayoría de los sistemas de bases
de datos ofrecen extensiones propietarias, extendiendo así las
funcionalidades de SQL.
TALLER DE BASE DE DATOS
Usos

• En algunos sistemas se usan para controlar el manejo de las transacciones.

• También pueden ser usados para el control de gestión de operaciones, y


ejecutar procedimientos almacenados dentro de una transacción de tal
manera que las transacciones sean efectivamente transparentes para ellos.
TALLER DE BASE DE DATOS
Ventajas

• El servidor de la base de datos tiene acceso directo a los datos necesarios para
manipular y sólo necesita enviar el resultado final al usuario.
• Los procedimientos almacenados pueden permitir que la lógica del negocio se
encuentre como un API en la base de datos.
• Reducen la probabilidad de que los datos sean corrompidos por el uso de
programas clientes defectuosos o erróneos.
• Aumentan el rendimiento: Una vez creados, son compilados y almacenados
en el catálogo de la base de datos. Corren más rápido que comandos SQL
enviados desde aplicaciones externas, ya que estos no están compilados.
TALLER DE BASE DE DATOS
• Reducen el tráfico entre las aplicaciones y el servidor de bases de datos.
• Son reusables y transparentes a cualquier aplicación que lo quiera usar.
• Son seguros: Los DBA pueden dar permiso a cierta aplicación para que pueda
acceder a y SP en el catálogo de la base de datos,
TALLER DE BASE DE DATOS
Desventajas
• No son modificables: Los Stored procedures son “definidos una vez, usados
muchas”. Si se necesita modificarlo, su definición tiene que ser reemplazada
totalmente.
• Cualquier cambio instantáneamente afecta todas las otras piezas de software,
reportes, etc. (dentro o fuera del SGBD) que directa o indirectamente se
refieran a este.
• Por varias razones, muchas organizaciones limitan estrictamente quiénes
pueden hacer consultas a la base de datos.
• Sólo contienen SQL declarativo, así que es muy dificil escribir procedimientos
complejos para negocios como en otros lenguajes
TALLER DE BASE DE DATOS
Tipos de SP

• SP definidos por el usuario: son procedimientos definidos por el


usuario que se deben llamar explícitamente
• Triggers: son procedimientos definidos por el usuario que se
ejecutan automáticamente cuando se modifica un dato en una tabla
• SP del sistema: procedimientos suministrados por el sistema (SQL
Server)
• SP extendidos: procedimientos que hacen llamadas al sistema
operativo y ejecutan tareas a ese nivel
TALLER DE BASE DE DATOS
Un procedimiento almacenado puede:
• Seleccionar y modificar datos
• Crear tablas temporales y permanentes
• Llamar otros procedimientos almacenados
• Referenciar objetos de bases de datos
Un procedimiento almacenado no puede ejecutar:
• use database
• create view
• create default
• create rule
• create procedure
• create trigger
TALLER DE BASE DE DATOS
Sintaxis
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY] ] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] } [;]
<procedure_option> ::= [ ENCRYPTION ] [ RECOMPILE ]
[ EXECUTE AS Clause ]
TALLER DE BASE DE DATOS

• La forma de crear un procedimiento


en SQL Server, es por medio de la
pantalla correspondiente en la base
de datos deseada.
TALLER DE BASE DE DATOS
Al oprimir la opción New Procedure se abre el una nueva ventana de Query
Analyzer en donde ya por default tenemos un templete de procedimiento el
cual podemos modificar según la necesidad que tengamos de desarrollo.
TALLER DE BASE DE DATOS
Ejemplo:
• Expandir la base de datos AdventureWorks2012
• Expandir la opcion Programability
• Con el click derecho seleccionar Procedures y la opción New
Procedure

Aparecerá la pantalla del Query Analyzer


• Copiar el siguiente código:
TALLER DE BASE DE DATOS

CREATE PROCEDURE dbo.PurchaseOrderInformation


AS BEGIN
SELECT poh.PurchaseOrderID, pod.PurchaseOrderDetailID,
poh.OrderDate, poh.TotalDue, pod.ReceivedQty, p.Name ProductName
FROM Purchasing.PurchaseOrderHeader poh
INNER JOIN Purchasing.PurchaseOrderDetail pod ON
poh.PurchaseOrderID = pod.PurchaseOrderID
INNER JOIN Production.Product p ON pod.ProductID = p.ProductID
END GO
TALLER DE BASE DE DATOS
• Al ejecutar el query se creará el procedimiento en la base de datos seleccionada
y las demás DB no podrán verlo
• La instrucción para ejecutar posteriormente el procedimiento es excec:

Sintaxis
EXECUTE | EXEC procedure_name [parameter1, parameter2, n…]
WITH RESULT SETS (
( [column_definition1, column_definition2, n…])
)
Ejemplo
USE AdventureWorks2012
EXEC dbo.PurchaseOrderInformation
TALLER DE BASE DE DATOS
Ejemplo: en este caso ejecutaremos de nuevo el procedimiento ya creado pero usando la
instrucción With Result Sets, la cual debe tener el mismo orden que las variables que
toma el Select del procedimiento o de lo contrario SQL Server enviará un error de
ejecución:

USE AdventureWorks2012;
EXEC dbo.PurchaseOrderInformation
WITH RESULT SETS (
( [Purchase Order ID] int,
[Purchase Order Detail ID] int,
[Order Date] datetime,
[Total Due] Money,
[Received Quantity] float,
[Product Name] varchar(50) )
)
TALLER DE BASE DE DATOS
Uso de parámetros en los procedimientos
• AL ser los procedimientos subrutinas de código programadas, es posible
pasarles parámetros en la misma forma que lo hacemos en un lenguaje de
programación de alto nivel. Para esto debemos especificarlos en la cláusula
Create Proc al final de la misma, como lo muestra el siguiente ejemplo:
USE AdventureWorks2012;
GO
CREATE PROC dbo.SampleOutput @Parameter2 int OUTPUT
As SELECT @Parameter2 = 10
DECLARE @HoldParameter2 INT
EXEC dbo.SampleOutput @HoldParameter2 OUTPUT
SELECT @HoldParameter2
TALLER DE BASE DE DATOS
Ejemplo:

USE AdventureWorks2012;
GO
ALTER PROCEDURE [dbo].[PurchaseOrderInformation]
@EmployeeID int, @OrderYear int = 2005
AS BEGIN
SELECT poh.PurchaseOrderID, pod.PurchaseOrderDetailID, poh.OrderDate,
poh.TotalDue, pod.ReceivedQty, p.Name ProductName
FROM Purchasing.PurchaseOrderHeader poh
INNER JOIN Purchasing.PurchaseOrderDetail pod ON
poh.PurchaseOrderID = pod.PurchaseOrderID
INNER JOIN Production.Product p ON pod.ProductID = p.ProductID
WHERE poh.EmployeeID = @EmployeeID AND
YEAR(poh.OrderDate) = @OrderYear
TALLER DE BASE DE DATOS
• Ejecución:

Con un solo parámetro:


USE AdventureWorks2012;
EXEC [dbo].[PurchaseOrderInformation] @EmployeeID = 258;

Con los dos parámetros


USE AdventureWorks2012;
EXEC [dbo].[PurchaseOrderInformation] @EmployeeID = 258, @OrderYear = 2006;
TALLER DE BASE DE DATOS
Triggers (Disparadores)
• Un trigger es un conjunto de instrucciones de T-SQL los cuales realizan tareas
específicas, las cuales se ejecutan únicamente cuando un evento de
manipulación de datos ocurre (por medio de DML), estos eventos son Delete,
Insert, y Update, los cuales pueden ser sobre tablas o sobre vistas.

Tipos de triggers:
• Existen varios tipos de triggers en SQL Server, en esta unidad nos enfocaremos
en dos de ellos, que son:
After
Instead Of
TALLER DE BASE DE DATOS

• After: este tipo de trigger es ejecutado después que una instrucción de DML
fue llamada. Es muy importante tener en cuenta que el trigger formará parte
de la misma transacción en la que fue disparado, por lo que dicha transacción
no se considera completa hasta que el trigger completa toda su ejecución.

• Instead Of: un trigger que es marcado como Instead Of es ejecutado en el


momento que el evento que lo dispara ocurre, sin embargo el evento en si no
será ejecutado, es decir, si lo llama un Insert, el trigger será ejecutado en su
lugar, y el insert en realidad no ocurrirá.
TALLER DE BASE DE DATOS
Sintaxis

CREATE TRIGGER [ schema_name . ]trigger_name


ON { table | view }
[ WITH <dml_trigger_option> [ ,...n ] ]
{ FOR | AFTER | INSTEAD OF }
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ NOT FOR REPLICATION ]
AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME <method specifier [ ; ] > }
<dml_trigger_option> ::= [ ENCRYPTION ] [ EXECUTE AS Clause ]
<method_specifier> ::= assembly_name.class_name.method_name
TALLER DE BASE DE DATOS
Procedimiento para crear un trigger

• Abrir
• SQL Server Management Studio (SSMS)
• Expandir la base de datos
• Expandir la carpeta Tables
• Seleccionar y expandir la tabla
correspondiente
• Expandir la carpeta Triggers
• Click con el derecho sobre Triggers
• Seleccionar New Trigger
TALLER DE BASE DE DATOS
Creación de el trigger:
USE AdventureWorks2012;
GO
CREATE TRIGGER HumanResources.iCheckModifedDate
ON HumanResources.Department FOR INSERT
AS BEGIN
DECLARE @modifieddate datetime, @DepartmentID int
SELECT @modifieddate = modifieddate, @DepartmentID = departmentid
FROM inserted;
IF (DATEDIFF(Day, @modifiedDate, getdate()) > 0)
BEGIN
UPDATE HumanResources.Department
SET ModifiedDate = GETDATE() WHERE DepartmentID = @DepartmentID
END
TALLER DE BASE DE DATOS
Disparar su ejecución:

USE AdventureWorks2012;
INSERT INTO HumanResources.Department
VALUES (
'Executive Marketing',
'Executive General and Administration',
'2/12/2011');
SELECT * FROM HumanResources.Department
TALLER DE BASE DE DATOS
Modificación de un trigger
• Expandir la base de datos
• Expandir la tabla correspondiente
• Expandir la carpeta triggers
• Seleccionar el trigger con click derecho y
luego la opción Modify
• Aparecerá el trigger en una ventana pero con
la sentencia Alter en lugar de Create
• Realizar los cambios necesarios y ejecutar
TALLER DE BASE DE DATOS
• Basándonos en la lámina anterior en el trigger buscar el código:
SET ModifiedDate = GETDATE()
• Y sustituirlo por:
SET ModifiedDate = DATEADD(day, -1, GETDATE() )
• Ejecutamos el query para completar la modificación del trigger
• En una nueva ventana de query analycer ejecutar el siguiente código:
USE AdventureWorks2012;
INSERT INTO HumanResources.Department
VALUES ('Executive Purchasing', 'Executive General and Administration',
'2/12/2011')
SELECT *FROM HumanResources.Department
TALLER DE BASE DE DATOS
• Desactivar y reactivar triggers: en algunos casos es necesario que un trigger deje de
ser disparado pero no deseamos eliminarlo por lo que SQL Server proporciona el
medio para desactivar un trigger en particular y luego reactivarlo cuando sea
necesario:

• Desactivar:
USE AdventureWorks2012;
DISABLE TRIGGER HumanResources.iCheckModifedDate
ON HumanResources.Department;

• Reactivar:
USE AdventureWorks2012;
ENABLE TRIGGER HumanResources.iCheckModifedDate
TALLER DE BASE DE DATOS
Bibliografía Consultada

Adam Jorgersen, Microsoft SQL Server 2012 Bible. John Wiley & Sons,
Inc. Indianapolis, Indiana. 2012.

https://msdn.microsoft.com. Página en Español, Sección de Ayuda de


SQL Server 2012. Consultado en Junio de 2015.

También podría gustarte