Sei sulla pagina 1di 44

UNIVERSIDAD SAN PEDRO

ESCUELA DE ING. INDUSTRIAL

Base de Datos

Resultados

Internet Requerimientos BASE


DATOS

Docente:
Ing. Jorge Sucari
Base de Datos

Tema 9:

Procedimientos Almacenados
(Stored Procedures)
Procedimientos Almacenados

Procedimiento Almacenado (Stored Procedure):


– Colección de sentencias SQL, con un nombre,
almacenadas en el servidor dentro de la BD.

Finalidad:
– Encapsular tareas repetitivas
Procedimientos Almacenados

Características:
– Soportan declaración de variables, ejecución
condicional y otras características de programación.
– Aceptan parámetros de entrada y devuelven valores.
– Devuelven un valor de estado que indica éxito o
falla.
– Pueden llamar a otros procedimientos almacenados.
Procedimientos Almacenados

Tipos:
– Del sistema
– Locales
– Temporales
– Remotos
– Extendidos
Procedimientos Almacenados

Procedimientos almacenados del sistema:


– Devuelven información de las tablas del sistema y
ejecutan tareas de mantenimiento.
– En SQL Server se almacenan en la BD master y sus
nombres comienzan con sp_:
• sp_help
Procedimientos Almacenados

Procedimientos almacenados locales:


– Creados en las BD de usuario individuales.

Procedimientos almacenados temporales:


– En SQL Server sus nombres empiezan con # o ##
(si son locales o globales).
– Los procedimientos almacenados temporales se
crean siempre en la BD tempdb
Procedimientos Almacenados

Procedimientos almacenados remotos:


– Soportan la funcionalidad de consultas y operaciones
distribuidas.

Procedimientos almacenados extendidos:


– Se ejecutan fuera del ambiente del servidor.
– En SQL Server, sus nombres comienzan con xp_.
– Los procedimientos almacenados extendidos son
funciones dentro de una DLL que incrementan la
funcionalidad de SQL Server.
Procedimientos Almacenados

Ventajas:
– Encapsulan la lógica de negocio y crean una lógica de
la aplicación reusable.
– Ocultan a los usuarios la complejidad subyacente y
detalles internos de la BD.
– Proveen mecanismos de seguridad.
– Mejoran el rendimiento.
– Reducen el tráfico en la red.
– Reducen la vulnerabilidad debido a los ataques de
infiltración de código intruso.
Creación de Procedimientos Almacenados

Consideraciones:
– Se emplea la sentencia CREATE PROCEDURE.
– Pueden referenciar tablas, vistas, otros procedimientos
y tablas temporales.
– En SQL Server la sentencia CREATE PROCEDURE es
un batch por si mismo.
SQL Server:
CREATE PROC sp_listado
AS
SELECT * FROM TEXTO
GO
Creación de Procedimientos Almacenados

Ejecución en SQL Server


– se emplea la sentencia EXECUTE seguida del
nombre del procedimiento y sus parámetros.
EXECUTE sp_listado

– En SQL Server se puede usar la forma abreviada


de EXECUTE: EXEC.
Creación de Procedimientos Almacenados

• Los procedimientos pueden anidarse (un


procedimiento llama a otro):
– El nivel de anidamiento es limitado.
– Si un P1 llama a P2, P2 puede acceder a todos los
objetos definidos localmente en P1.
• En SQL Server puede haber hasta 32 niveles de
anidamiento, y la variable @@nestlevel guarda el
nivel de anidamiento actual.
Creación de Procedimientos Almacenados

En SQL Server:
– Para ver información sobre los procedimientos:

sp_help , sp_helptext y sp_depends

– Para obtener una lista de procedimientos:

sp_stored_procedures
Recomendaciones

• Cualificar los nombres de los objetos dentro del cuerpo


del procedimiento.

• En SQL Server, tratar de evitar romper la cadena de


permisos.

• Realizar un procedimiento por cada tarea (cohesión).

• Crear, probar y corregir los procedimientos en el


servidor, luego hacer la prueba en los clientes.
Modificación y Borrado

• En SQL Server, para modificar un procedimiento se


puede usar la sentencia ALTER PROC[EDURE]
Ejemplo SQL Server:
ALTER PROC esquema1
AS
SELECT CONVERT(char(8),due_date,1) due_date,
codigo, nrocopia, SUBSTRING(title, 1, 30) titulo,
FROM Texto
ORDER BY due_date
GO
Modificación y Borrado

Borrado de un procedimiento (SQL Server):


DROP PROC[EDURE] esquema1

En el caso de SQL Server, también se puede


borrar un procedimiento desde SSMS
Parámetros de Entrada

Parámetros de entrada:
– Permiten pasar información a los procedimientos.

– Se los debe declarar en la sentencia CREATE


PROCEDURE.
Parámetros de Entrada

Consideraciones:
– Verificar al principio del procedimiento los valores de
entrada para detectar posibles valores inválidos.
– Proveer valores por defecto apropiados (SQL Server).
– El máximo número de parámetros depende del
SGBDR.
– En el caso de SQL Server 2008, un procedimiento
soporta hasta 2100 parámetros de entrada.
Parámetros de Entrada

Consideraciones:
– El máximo número de variables locales es limitado
solamente por la memoria disponible (depende del
SGBDR).
– Los parámetros tienen un ámbito local al
procedimiento.
Parámetros de Entrada

SQL Server:

CREATE PROC inserta_cliente


@codi varchar(10), @apell varchar(20), @ nomb varchar(20)
AS
Begin
Insert into Cliente(codigo, apellidos, nombres)
Values(@codi, @apell, @nomb)
End
Go
Parámetros de Entrada

Llamada a un procedimiento con parámetros de


entrada:
– SQL Server
• Por referencia
• Por posición

En el caso de SQL Server, no se puede mezclar ambas


formas durante el llamado del procedimiento.
Parámetros de Entrada

Llamada por referencia:


– En la sentencia EXEC se especifica el parámetro de
la forma @parámetro = valor.
– El orden de los parámetros puede ser cualquiera.
– Se pueden omitir parámetros.
– Se puede especificar @parámetro = DEFAULT.
Parámetros de Entrada

Llamada por referencia:


EXEC listado_adultos

@nombre = 'Linda',

@apellidos = 'Lopez',

@calle = ‘Mantaro',

@ciudad = ‘Trujillo',
Parámetros de Entrada

Llamada por posición (SQL Server):


– Se pasan los valores en el mismo orden en que
fueron definidos el procedimiento.
– Se pueden omitir parámetros en valores por
defecto, pero no se debe interrumpir la secuencia.
– Se usan también valores nulos y DEFAULT como
parámetros.
Parámetros de Entrada

Llamada por posición (SQL Server):

EXEC listado_adultos 'Linda', 'Lopez', ‘Mantaro', ‘Trujillo',


Parámetros de Salida

• Un procedimiento puede devolver información a quien lo


llama en forma de parámetros de salida.
• SQL Server usa OUTPUT al definir el procedimiento:

CREATE PROCEDURE dbo.mathtutor


@m1 smallint, @m2 smallint,
@resultado smallint OUTPUT
AS
SET @resultado = @m1 * @m2
GO
Parámetros de Salida

• Llamada a un procedimiento con parámetros de


salida:
– SQL Server
• Se emplea la cláusula OUTPUT.
• Quien llama al procedimiento debe tener una
variable para guardar el valor de salida.

DECLARE @answer smallint


EXEC mathtutor 5, 6, @answer OUTPUT
SELECT 'El resultado es: ' , @answer
Estructuras de Control de Flujo
Estructuras de Control de Flujo

1) IF…ELSE
La palabra clave IF con o sin la compañía ELSE se utiliza
para introducir una condición que determina si se ejecutará
la instrucción siguiente. La instrucción SQL se ejecuta si la
condición se cumple, es decir, si devuelve TRUE
(verdadero)
La palabra clave ELSE introduce una instrucción SQL
alternativa que se ejecuta cuando la condición IF devuelva
FALSE (falso).
Estructuras de Control de Flujo
Ejemplos:
a) Cree un procedimiento almacenado que permita el ingreso de
datos de un usuario. El procedimiento tendrá los siguientes
parámetros de entrada: código, nombre, apellido paterno, apellido
materno, fecha de nacimiento, fecha de registro, tipo de documento,
número de documento y código de estado.
Considere las siguientes condiciones antes de ingresar un usuario:
El código del usuario debe ser único
No deberá ingresar usuarios cuya edad sea menor de 18 años
b) Cree un procedimiento almacenado que permita modificar los
datos de un inquilino. El procedimiento tendrá los siguientes
parámetros de entrada: código de usuario, nombre de aval,
apellido del aval, Haber básico, estado civil y lugar de trabajo
del inquilino. Así mismo, sólo se podrán modificar aquellos
inquilinos cuyo Haber básico sea menor a 600 soles.
CREATE PROCEDURE MODIFICA_INQUILINO
@COD_USUA char(6), @NOM_AVAL_INQ varchar(30),
@APELL_AVAL char(30), @HABER_BAS_INQ float,
@EST_CIVIL_INQ char(1), @LUG_TRAB_INQ varchar(50)
AS
-- Variables
Declare @HABER_BAS_INQ_ACTUAL float
-- Obtener el Haber Básico Actual del Inquilino
Select @HABER_BAS_INQ_ACTUAL = HABER_BAS_INQ
From INQUILINO
Where COD_USUA = @COD_USUA
-- Verificar el Haber Básico del Inquilino
If @HABER_BAS_INQ_ACTUAL>600
Begin
Select 'El Haber Básico del Inquilino debe ser menor a 600 soles'
Return
End
-- Actualizar los Datos
Update INQUILINO
Set COD_USUA = @COD_USUA,
NOM_AVAL_INQ = @NOM_AVAL_INQ,
APELL_AVAL = @APELL_AVAL,
HABER_BAS_INQ = @HABER_BAS_INQ,
EST_CIVIL_INQ = @EST_CIVIL_INQ,
LUG_TRAB_INQ = @LUG_TRAB_INQ
Where COD_USUA = @COD_USUA
2) WHILE
WHILE se utiliza para definir una condición para la ejecución
repetida de una instrucción o un bloque de instrucciones. Las
instrucciones se ejecutan reiteradamente siempre que la
condición especificada es verdadera.
La sintaxis de WHILE es
WHILE BOOLEAN_EXPRESION
EXPRESION_SQL

BREAK y CONTINUE controlan el funcionamiento de las


instrucciones dentro de un bucle while. BREAK permite salir del
bucle while. CONTINUE hace que el bucle while se inicie de
nuevo.
6.1.2.7. CASE
La función CASE es una expresión especial de Transact SQL
que permite que se muestre un valor alternativo dependiendo de
una columna. Este cambio es temporal, con lo que no hay
cambios permanentes en los datos.
La función CASE está compuesta de:
• La palabra CASE
• El nombre de la columna que se va transformar
• Cláusulas WHEN que se especifican las expresiones que se
van a buscar y cláusulas THEN que especifican las
expresiones que las van a reemplazar
• La palabra END
Ejemplo:
Select COD_USUA, NOM_USUA, APEPATER_USUA, APEMATER_USUA,
Case Month(FEC_NAC_USUA)
When 1 Then 'Enero'
When 2 Then 'Febrero'
When 3 Then 'Marzo'
When 4 Then 'Abril'
When 5 Then 'Mayo'
When 6 Then 'Junio'
When 7 Then 'Julio'
When 8 Then 'Agosto'
When 9 Then 'Septiembre'
When 10 Then 'Octubre'
When 11 Then 'Noviembre'
When 12 Then 'Diciembre'
End As Mes_Nacimiento From USUARIO
Crear un sp que permita incrementar el haber básico de un inquilino en
función de su estado civil (20% para casados o viudos y 10% para los
solteros y divorciados). Asimismo, si el inquilino tiene una comisión
aumentar su haber con ese monto.
Create Procedure spIncHaberInquilino
@Inquilino Char(6), @Comision Numeric(10,2) = Null --Parámetro con valor
por defecto
As
Begin -- Inicio del sp
-- Validar que el código y la descripcion no sean nulas
If( @Inquilino Is Null )
Begin
Print 'El código del inquilino no puede ser NULO!!!'
Return
End
-- Validar si el inquilino existe
If Not Exists(Select * From Inquilino Where Cod_Usua = @Inquilino)
Begin
Print 'Actualizacion cancelada. El inquilino no existe.'
Return
End
-- Variables locales para el proceso
Declare @HaberBasico Int
Declare @EstadoCivil Char(1)
Declare @IncrementoPorEstadoCivil Int

-- Determinar valores del inquilino


Select @HaberBasico = Haber_Bas_Inq, @EstadoCivil = Est_Civil_Inq
From Inquilino Where Cod_Usua = @Inquilino
-- Determinar porcentaje de incremento
If(@EstadoCivil In ('C','V'))
Set @IncrementoPorEstadoCivil = @HaberBasico * 0.20
Else
Set @IncrementoPorEstadoCivil = @HaberBasico * 0.10

-- Eliminar el departamento
Update Inquilino
Set Haber_Bas_Inq = Haber_Bas_Inq +
@IncrementoPorEstadoCivil + IsNull(@Comision,0)
Where Cod_Usua = @Inquilino
End
-- Fin del spIncHaberInquilino
FIN

Potrebbero piacerti anche