Sie sind auf Seite 1von 41

SQL de procedimientos

AGENDA
VISTAS
PROCEDIMIENTOS
FUNCIONES DE USUARIO
TRIGGERS
CURSORES
¿Qué es una Vista?
Introducción a las vistas
Employees
EmployeeID LastName Firstname Title
1 Davolio Nancy ~~~
2 Fuller Andrew ~~~
3 Leverling Janet ~~~

USE Northwind
GO
CREATE VIEW dbo.EmployeeView
AS
SELECT LastName, Firstname
FROM Employees

EmployeeView
Lastname Firstname
Davolio Nancy Vista del usuario
Fuller Andrew
Leverling Janet
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.
• Simplificar la administración de los permisos de usuario
• Mejorar el rendimiento
• Organizar los datos para exportarse a otras aplicaciones
¿Qué es un procedimiento almacenado?
Definición de procedimientos almacenados

• Colecciones con nombre de instrucciones Transact-SQL

• Encapsulado de tareas repetitivas (cursores)

• Pueden o no aceptar parámetros de entrada

• Siempre devuelven valores


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


Creación de procedimientos almacenados

• Se utiliza la instrucción CREATE PROCEDURE para crearlos en la


base de datos activa

USE Northwind
GO
CREATE PROC dbo.OverdueOrders
AS
SELECT *
FROM dbo.Orders
• WHERE
PuedeRequiredDate < GETDATE() AND ShippedDate IS Null
anidar hasta 32 niveles
GO • Use sp_help para mostrar información
Ejecución de procedimientos almacenados
• Ejecución de un procedimiento almacenado por
separado

EXEC OverdueOrders

• Ejecución de un procedimiento almacenado en una


instrucción INSERT

INSERT INTO Customers


EXEC EmployeeCustomer
Ejecución de procedimientos
• Paso de valores por el nombre del parámetro
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'

• Paso de valores por posición

EXEC AddCustomer 'ALFKI2', 'Alfreds


Futterkiste', 'Maria Anders', 'Sales
Representative', 'Obere Str. 57', 'Berlin',
NULL, '12209', 'Germany', '030-0074321'
Devolución de valores mediante parámetros de
salida

CREATE PROCEDURE dbo.mathtutor


Creación del
procedimiento @m1 smallint,
almacenado @m2 smallint,
@result smallint OUTPUT
AS
SET @result = @m1* @m2
Ejecución del GO
procedimiento DECLARE @answer smallint
almacenado
EXECUTE mathtutor 5, 6, @answer OUTPUT
SELECT 'The result is: ' , @answer
Resultados del
procedimiento
almacenado The result is: 30
Práctica Procedimientos Almacenados
PROCEDIMIENTOS CON PARÁMETROS
PROCEDIMIENTOS ALMACENADOS CON PARÁMETROS
CON VALORES POR DEFECTO
VARIABLES DE SALIDA
EN PROCEDIMIENTOS ALMACENADOS
¿Qué es una función definida por el usuario?
¿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(Oper. matematica)
• 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
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
Demostracion:
Creación de funciones definidas por el usuario
FUNCIONES DEFINIDAS POR EL USUARIO

Declare Table
Funciones Escalares
Práctica:
Creación de funciones definidas por el usuario
Ejercicios

Ver Solución
Ejercicios

Solución
¿Que es un TRIGGER?
(DESENCADENADORES, DISPARADORES)
¿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 (Insert, Update, Delette)
Consideraciones acerca del uso de
desencadenadores

• Los desencadenadores son reactivos. Por ejemplo un


disparador puede ser ejecutado para corregir una accion que
programo el usuario

• 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.
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
Demostracion:
TRIGGERS (DESENCADENADORES,
DISPARADORES)
TRIGGERS
Cursores

INTRODUCCIÓN A CURSORES EN SQL SERVER


Cursores

Herramienta de SQL que permite

• recorrer el resultado de una


consulta SQL
y

• realizar operaciones en cada


paso de ésta
Cursores

Sintaxis

DECLARE nombre-cursor FOR


especificacion-consulta
[ORDER BY]
Cursores

Ejemplo

DECLARE Mi_Cursor FOR


SELECT num_emp, nombre, puesto, salario
FROM empleados
WHERE num_dept = 'informatica'
Cursores

Abrir o activar un cursor

OPEN nombre-cursor [USING lista-variables]


Cursores

Para recuperar las filas del cursor

FETCH nombre-cursor INTO lista-variables


Cursores

Para cerrar un cursor

CLOSE nombre-cursor
Cursores

Para eliminar el cursor

DROP CURSOR nombre-cursor


Ejemplos (sobre SQL-SERVER): Cursores

'Abrir un cursor y recorrelo


DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM Northwind.dbo.Employees
WHERE LastName like 'B%'

OPEN Employee_Cursor

FETCH NEXT FROM Employee_Cursor

WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor
END
CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor

Das könnte Ihnen auch gefallen