Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Procedimientos Almacenados
Contenido
Introduccin
10
21
Ejecucin de procedimientos
almacenados extendidos
32
34
38
Introduccin
Objetivo del tema
Explicacin previa
Objetivos
Despus de completar este mdulo, el alumno ser capaz de:
Explicacin previa
En esta seccin,
trataremos
Explicacin previa
Para su informacin
Algunos procedimientos
almacenados del sistema
llaman a procedimientos
almacenados extendidos.
Creacin
Creacin
Anlisis
Anlisis
Se
Se almacena
almacena en
en las
las tablas
tablas
sysobjects
sysobjects yy syscomments
syscomments
Explicacin previa
El procesamiento de un
procedimiento almacenado
incluye crearlo y ejecutarlo
por primera vez, lo que
coloca su plan de ejecucin
en la cach.
Ejecucin
Ejecucin
((por
por primera
primeravez
vez
oorecompilacin)
recompilacin)
Optimizacin
Optimizacin
Compilacin
Compilacin
El
El plan
plan compilado
compilado se
se
coloca
coloca en
en la
la cach
cach de
de
procedimientos
procedimientos
Creacin
Cuando se crea un procedimiento almacenado, las instrucciones que hay
en l se analizan para ver si son correctas desde el punto de vista sintctico.
A continuacin, SQL Server almacena el nombre del procedimiento
almacenado en la tabla del sistema sysobjects y su texto en la tabla del sistema
syscomments en la base de datos activa. Si se detecta un error de sintaxis, se
devuelve un error y no se crea el procedimiento almacenado.
Sugerencia
Comente el proceso de
resolucin diferida de
nombres.
Optimizacin
Cuando un procedimiento almacenado pasa correctamente la etapa de
resolucin, el optimizador de consultas de SQL Server analiza las instrucciones
de Transact-SQL del procedimiento almacenado y crea un plan que contiene el
mtodo ms rpido para obtener acceso a los datos. Para ello, el optimizador
de consultas tiene en cuenta lo siguiente:
Compilacin
La compilacin hace referencia al proceso consistente en analizar el
procedimiento almacenado y crear un plan de ejecucin que se encuentra en la
cach de procedimientos. La cach de procedimientos contiene los planes de
ejecucin de los procedimientos almacenados ms importantes. Entre los
factores que aumentan el valor de un plan se incluyen los siguientes:
Frecuencia de uso
Plan de consulta
Contexto de ejecucin
Conexin 1
Explicacin previa
SELECT *
FROM
dbo.member
WHERE
member_no = ?
8082
Conexin 2
24
Conexin 3
1003
Si se dan las condiciones siguientes, SQL Server utiliza el plan que guarda en la
memoria para ejecutar las consultas posteriores:
Por tanto, en la cach siempre habr, como mximo, un plan compilado para
cada combinacin exclusiva de procedimiento almacenado y entorno. Puede
haber muchos planes para el mismo procedimiento almacenado si cada uno es
para un entorno distinto.
Los factores siguientes dan como resultado distintos entornos que afectan a las
opciones de compilacin:
Explicacin previa
Mejorar el rendimiento
10
Presentar la creacin,
ejecucin y modificacin
de procedimientos
almacenados.
Explicacin previa
11
Presentar la sintaxis de
CREATE PROCEDURE.
Explicacin previa
Utilice la instruccin
CREATE PROCEDURE
para crear procedimientos
almacenados en la base de
datos activa.
USE Northwind
GO
CREATE PROC dbo.OverdueOrders
AS
SELECT *
FROM dbo.Orders
WHERE RequiredDate < GETDATE() AND ShippedDate IS Null
GO
12
Sintaxis parcial
Ejemplo
13
14
Describir recomendaciones
para la creacin de procedimientos almacenados.
Explicacin previa
Sugerencia
15
16
Describir cmo se
ejecuta un procedimiento
almacenado.
Explicacin previa
Sugerencia
Sintaxis
[ [ EXEC [ UTE ] ]
{
[@estadoDevuelto =]
{ nombreProcedimiento [;nmero] | @ nombreProcedimientoVar
}
[ [ @parmetro = ] { valor | @variable [ OUTPUT ] | [ DEFAULT ] ]
[ ,...n ]
[ WITH RECOMPILE ]
Ejemplo 1
Ejemplo 2
17
(9 filas afectadas)
18
Presentar la instruccin
ALTER PROCEDURE.
Explicacin previa
USE
USE Northwind
Northwind
GO
GO
ALTER
ALTER PROC
PROC dbo.OverdueOrders
dbo.OverdueOrders
AS
AS
SELECT
SELECT CONVERT(char(8),
CONVERT(char(8), RequiredDate,
RequiredDate, 1)
1) RequiredDate,
RequiredDate,
CONVERT(char(8),
CONVERT(char(8), OrderDate,
OrderDate, 1)
1) OrderDate,
OrderDate,
OrderID,
OrderID, CustomerID,
CustomerID, EmployeeID
EmployeeID
FROM
FROM Orders
Orders
WHERE
WHERE RequiredDate
RequiredDate << GETDATE()
GETDATE() AND
AND ShippedDate
ShippedDate IS
IS Null
Null
ORDER
ORDER BY
BY RequiredDate
RequiredDate
GO
GO
z
19
Sintaxis
Ejemplo
Resultado
OrderDate
05/06/98
04/08/98
05/11/98
04/13/98
05/19/98
04/21/98
05/21/98
04/22/98
05/25/98
04/23/98
.
.
.
(21 filas afectadas)
OrderID
CustomerID
EmployeeID
11008
11019
11039
11040
11045
ERNSH
RANCH
LINOD
GREAL
BOTTM
7
6
1
4
6
20
Ejemplo
21
Explicacin previa
En esta seccin,
trataremos
22
Explicacin previa
CREATE
CREATE PROCEDURE
PROCEDURE dbo.[Year
dbo.[Year to
to Year
Year Sales]
Sales]
@BeginningDate
@BeginningDate DateTime,
DateTime, @EndingDate
@EndingDate DateTime
DateTime
AS
AS
IF
IF @BeginningDate
@BeginningDate IS
IS NULL
NULL OR
OR @EndingDate
@EndingDate IS
IS NULL
NULL
BEGIN
BEGIN
RAISERROR('NULL
values
are
not
allowed',
14,
RAISERROR('NULL values are not allowed', 14, 1)
1)
RETURN
RETURN
END
END
SELECT
SELECT O.ShippedDate,
O.ShippedDate,
O.OrderID,
O.OrderID,
OS.Subtotal,
OS.Subtotal,
DATENAME(yy,ShippedDate)
DATENAME(yy,ShippedDate) AS
AS Year
Year
FROM
FROM ORDERS
ORDERS OO INNER
INNER JOIN
JOIN [Order
[Order Subtotals]
Subtotals] OS
OS
ON
ON O.OrderID
O.OrderID == OS.OrderID
OS.OrderID
WHERE
WHERE O.ShippedDate
O.ShippedDate BETWEEN
BETWEEN @BeginningDate
@BeginningDate AND
AND @EndingDate
@EndingDate
GO
GO
Ejemplo
23
24
Explicacin previa
Sintaxis
[ [ EXEC [ UTE ] ]
{
[@estadoDevuelto =]
{ nombreProcedimiento [;nmero] | @ nombreProcedimientoVar
}
[ [ @parmetro = ] { valor | @variable [ OUTPUT ] | [ DEFAULT ] ]
[ ,...n ]
[ WITH RECOMPILE ]
Ejemplo parcial 1
Ejemplo parcial 2
25
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
26
27
Creacin
Creacindel
del
procedimiento
procedimiento
almacenado
almacenado
Explicacin previa
Sugerencia
Describa en detalle la
diapositiva de ejemplo y
demuestre cmo crear y
usar el procedimiento
almacenado MathTutor.
Ejecucin
Ejecucindel
del
procedimiento
procedimiento
almacenado
almacenado
Resultados
Resultadosdel
del
procedimiento
procedimiento
almacenado
almacenado
CREATE
CREATE PROCEDURE
PROCEDURE dbo.mathtutor
dbo.mathtutor
@m1
@m1 smallint,
smallint,
@m2
@m2 smallint,
smallint,
@result
@result smallint
smallint OUTPUT
OUTPUT
AS
AS
SET
SET @result
@result == @m1*
@m1* @m2
@m2
GO
GO
DECLARE
DECLARE @answer
@answer smallint
smallint
EXECUTE
mathtutor
EXECUTE mathtutor 5,
5, 6,
6, @answer
@answer OUTPUT
OUTPUT
SELECT
'The
result
is:
'
SELECT 'The result is: ' ,, @answer
@answer
The
The result
result is:
is: 30
30
Ejemplo 1
28
Resultado
29
Explicacin previa
sp_recompile
30
EXECUTE[WITH RECOMPILE]
La instruccin EXECUTE...[WITH RECOMPILE] crea un plan de ejecucin
nuevo cada vez que se ejecuta el procedimiento, si se especifica WITH
RECOMPILE. El nuevo plan de ejecucin no se almacena en la cach.
Utilice esta opcin si el parmetro que est pasando vara mucho de los que
normalmente se pasan a este procedimiento almacenado. Puesto que este plan
optimizado es la excepcin de la regla, cuando se termina la ejecucin, debe
volver a ejecutar el procedimiento almacenado con los parmetros que se le
pasan normalmente. Esta opcin es til tambin si los datos han cambiado
significativamente desde que se compil por ltima vez el procedimiento
almacenado.
Ejemplo 2
sp_recompile
El procedimiento almacenado del sistema sp_recompile vuelve a compilar el
procedimiento almacenado o desencadenador especificado la prxima vez que
se ejecute. Si el parmetro @objname especifica una tabla o vista, todos los
procedimientos almacenados que usan el objeto nombrado se volvern a
compilar la siguiente vez que se ejecuten.
Use el procedimiento almacenado del sistema sp_recompile con la opcin
nombreTabla si ha agregado un ndice nuevo a una tabla subyacente a la que
hace referencia el procedimiento almacenado y cree que el rendimiento del
procedimiento almacenado se beneficiar del nuevo ndice.
Ejemplo 3
31
32
Explicacin previa
Los procedimientos
almacenados extendidos
Sugerencia
Ejemplo 2
33
Descripcin
xp_cmdshell
xp_logevent
Resultado
34
Explicacin previa
Instruccin RAISERROR
z
Instruccin RETURN
La instruccin RETURN sale incondicionalmente de una consulta o
procedimiento almacenado. Tambin puede devolver el estado como
un valor entero (cdigo de retorno).
El valor 0 indica xito. En la actualidad se utilizan los valores de retorno de
0 a -14, mientras que los valores de retorno de -15 a -99 estn reservados para
usarse en el futuro. Si no se proporciona un valor de retorno definido por el
usuario, se usa el valor de SQL Server. Los valores de retorno definidos por el
usuario tienen precedencia sobre los que suministra SQL Server.
Ejemplo 1
35
sp_addmessage
Este procedimiento almacenado permite a los programadores crear mensajes de
error personalizados. SQL Server trata los mensajes de error personalizados y
del sistema de la misma forma. Todos los mensajes se almacenan en la tabla
sysmessages de la base de datos master. Estos mensajes de error se pueden
escribir automticamente en el registro de aplicacin de Windows 2000.
Ejemplo 2
En este ejemplo se crea un mensaje de error definido por el usuario que requiere
que el mensaje se escriba en el registro de aplicacin de Windows 2000 cuando
ocurra.
EXEC sp_addmessage
@msgnum = 50010,
@severity = 10,
@lang= 'us_english',
@msgtext = 'Customer cannot be deleted.',
@with_log = 'true'
@@error
Esta funcin del sistema contiene el nmero de error de la instruccin de
Transact-SQL ejecutada ms recientemente. Se borra y se reinicializa con
cada instruccin que se ejecuta. Si la instruccin se ejecuta correctamente,
se devuelve el valor 0. Puede usar la funcin del sistema @@error para
detectar un nmero especfico de error o para salir condicionalmente de un
procedimiento almacenado.
Ejemplo 3
36
37
@ProductName,
@InsertSupplierID,
@CategoryID,
@QuantityPerUnit,
@Discontinued)
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END
COMMIT TRANSACTION
Instruccin RAISERROR
La instruccin RAISERROR devuelve un mensaje de error definido por el
usuario y establece un indicador del sistema para advertir de que se ha
producido un error. Cuando la utilice, debe especificar un nivel de gravedad
del error y un estado del mensaje.
La instruccin RAISERROR permite a la aplicacin recuperar una entrada
de la tabla del sistema master.sysmessages o crear un mensaje dinmicamente
con la gravedad y la informacin de estado que especifique el usuario. La
instruccin RAISERROR puede escribir mensajes de error en el registro de
errores de SQL Server y en el registro de aplicacin de Windows 2000.
Ejemplo 4
Sugerencia
La instruccin RAISERROR
requiere que se especifique
el nivel de gravedad del
error y el estado del
mensaje.
38
Explicacin previa
Cuando se implementan
procedimientos almacenados, es necesario
tener en cuenta estas
consideraciones de
rendimiento.
Analizador de SQL
z
z
Contadores
Estadsticas de SQL
Recompilaciones de SQL/seg.
39
Analizador de SQL
El Analizador de SQL es una herramienta grfica que le permite supervisar
eventos, como cundo se ha iniciado o se ha completado el procedimiento
almacenado o cundo se han iniciado o completado determinadas instrucciones
de Transact-SQL individuales de un procedimiento almacenado. Adems,
puede supervisar si un procedimiento almacenado se encuentra en la cach de
procedimientos.
En la fase de desarrollo de un proyecto, tambin puede probar las instrucciones
del procedimiento almacenado, de lnea en lnea, para confirmar que las
instrucciones funcionan como se esperaba.
Nota Tenga cuidado cuando cree procedimientos almacenados anidados.
La anidacin agrega un nivel de complejidad que dificulta la resolucin
de problemas de rendimiento.