Sie sind auf Seite 1von 13

SENATI - TRUJILLO

PROCEDIMIENTOS ALMACENADOS 1

Introducción
Un procedimiento almacenado es un procedimiento escrito por un desarrollador de aplicaciones
para bases de datos y que está asociado a una base de datos específica. A continuación, otras
aplicaciones de escritorio o Web pueden invocar estos procedimientos almacenados para acceder
y manipular datos de la base de datos.
Acceso programático a
Los procedimientos almacenados permiten el acceso a una base de datos una base de datos
mediante la invocación de un procedimiento existente en lugar de tener que escribir nuestras
propias instrucciones SQL. Los procedimientos almacenados están formados por secuencias de
instrucciones Transact-SQL, y funcionan de modo similar a los procedimientos de una aplicación
Web en cuanto a que las instrucciones se invocan por su nombre, y pueden tener tanto
parámetros de entrada como de salida.
Los tres tipos de procedimientos almacenados son:
Procedimientos almacenados que devuelven registros
Los procedimientos almacenados que devuelven registros se utilizan para encontrar registros
específicos, clasificar y filtrar esos registros, y devolver el resultado de las operaciones de
búsqueda, clasificación y filtrado hacia una aplicación desde la cual se ha invocado. Estos
procedimientos almacenados se basan en instrucciones Select de SQL.
Un ejemplo de un procedimiento almacenado que devuelve registros es una petición de la
cantidad, fecha y receptor de los tres últimos movimientos procesados en una cuenta bancaria. Es
tos datos son enviados a la aplicación que lo invoco y mostrarlo en un control apropiado.

Procedimientos almacenados escalares


Los procedimientos almacenados que retornan un valor se utilizan para ejecutar un comando o
función de la base de datos que devuelve un único valor. Debido a que sólo se devuelve un valor,
los procedimientos almacenados que retornan un valor a menudo se utilizan en el código y, a
continuación, el resultado se muestra a los usuarios.
Un ejemplo de procedimiento almacenado que retorna un valor es devolver el valor total de los
tres últimos movimientos que se han procesado en una cuenta bancaria.
Los procedimientos almacenados de acción
Los procedimientos almacenados de acción se utilizan para realizar algunas funciones en la base
de datos, pero no devuelven un registro o un valor.
Estas funciones de la base de datos pueden incluir actualizar, editar o modificar los datos.
Un ejemplo de un procedimiento almacenado de acción es una petición para actualizar una sola
dirección de correo en la base de datos de clientes de una compañía.
Crear procedimientos almacenados
CREATE PROCEDURE NOMBRE
[PARAMETROS DE ENTRADA /SALIDA]
AS
Begin
INSTRUCCIÓN SQL
End
SENATI - TRUJILLO
Donde:
2
Parámetros de Entrada
Reciben los valores enviados desde del exterior al procedimiento almacenado (con igual
cantidad de parámetros), por lo general desde una aplicación
Sintaxis:
@param1 tipo,@param2 tipo,@param3 tipo,…

Param1, Param2, param3…: Son los nombres que se dan a los parámetros
Tipo: Int, char(n),varchar(n),datetime,numeric(#,#), etc

Parámetros de Salida
Envían valores desde un procedimiento almacenado al exterior, por lo general a una aplicación
Sintaxis:
@param1 tipo Output,@param2 tipo Output,@param3 tipo Output,…

Instrucción SQL
Pueden estar conformadas por comandos Insert, update, select, delete.

Ejecutar procedimientos almacenados desde SQL Server


Para poder comprobar que el procedimiento almacenado este correcto, se recomienda primero
comprobarlo en el servidor antes de utilizarlo para una aplicación.
EXECUTE NombreProcedimiento [valor1,valor2,valor3, …]
Donde:
Valor1, Valor2, Valor3,… son los valores que se envían al procedimiento almacenado

Nota importante: Para crear o ejecutar el procedimiento almacenado, primero se selecciona el


código y luego se ejecuta.

Practica1: Crear Procedimientos almacenados para manejar las


instrucciones SQL pero sin parámetros.
Solución:
1.- Crear la base de datos y la tabla empleados

Create database empresa


go

Use empresa
go

Create table empleados(idemp int primary key not null,


apeemp varchar(40), sueemp numeric(9,2), sexemp bit, fnacemp datetime)
go
SENATI - TRUJILLO
2.- Crear procedimientos almacenados para insertar, consultar, modificar y eliminar para
3
luego ejecutarlos

2.1 Para Insertar un registro


Create procedure Sp_inserta
As
Begin
Insert into empleados values(1,'Rojas Li',1000,1,'26/09/1977')
End
go
-----Ejecutar para que se pueda realizar la inserción-----------
Execute Sp_inserta
go

2.2 Para mostrar la tabla empleados


Create procedure Sp_muestra
As
Begin
Select * from empleados
End
go
-----Ejecutar para mostrar todos los registros-----------
Execute Sp_muestra
go

2.3 Para modificar el apellido del registro insertado


Create procedure Sp_modifica
As
Begin
Update empleados set apeemp='Sanchez Zavaleta' where idemp=1
End
go
-----Ejecutar para actualizar apellidos-----------
Execute Sp_modifica
go

2.4 Para eliminar el registro eliminado


Create procedure Sp_elimina
As
Begin
delete from empleados where idemp=1
End
go

-----Ejecutar para eliminar registro-----------


Execute Sp_elimina
go
SENATI - TRUJILLO
Practica2: Crear Procedimientos almacenados para manejar las 4
instrucciones SQL con parámetros de entrada.
Del caso anterior, manejaremos los registros en forma dinámica empleando parámetros de
entrada

1.- Para insertar registros

Create procedure Sp_insertadin


@vid int,@vape varchar(40),@vsue numeric(9,2),@vsex bit,@vfec datetime
As
Begin
Insert into empleados values(@vid,@vape,@vsue,@vsex,@vfec)
End
go

-----Ejecutar para que se pueda realizar la inserción-----------


Execute Sp_insertadin 2,'Palacios Jara',1500,0,'26/09/1980'
go

------Comprobar------------
Select * from empleados
go
--Nota: Si queremos ingresar más registros, seria de la forma siguiente:

Execute Sp_insertadin 3,'Lopez Uriol',2000,1,'03/01/1967'


go
Execute Sp_insertadin 4,'Carpio Ore',1200,0,'05/04/1983'
go
Execute Sp_insertadin 5,'Prado Ugaz',800,1,'16/08/1990'
go
Execute Sp_insertadin 6,'Llerena Huaman',500,1,'21/11/1981'
go

2.- Para mostrar registros


A continuación, presentamos varios ejemplos de cómo se puede crear procedimientos
almacenados para mostrar la información.
Ejemplos:
2.1 Mostrar el registro de un empleado por su campo clave
Create procedure Sp_muestradin
@vid int
as
begin
select * from empleados where idemp=@vid
end
go
SENATI - TRUJILLO
-----Ejecutar para mostrar el registro según el campo clave enviado-----------
Execute Sp_muestradin 3 5
go

2.2 Mostrar los empleados que ganan más del sueldo enviado al procedimiento

Create procedure Sp_muestradin2


@vsue numeric(9,2)
As
Begin
select * from empleados where sueemp>=@vsue
End
go

-----Ejecutar para mostrar los registros que ganan más de 1000-----------


Execute Sp_muestradin2 1000
go
-----Ejecutar para mostrar los registros que ganan más de 1500-----------
Execute Sp_muestradin2 1000
go

2.3 Mostrar los empleados que ganan entre el rango de sueldos enviados al procedimiento

Create procedure Sp_muestradin3


@vsue1 numeric(9,2),@vsue2 numeric(9,2)
As
Begin
select * from empleados where sueemp>=@vsue1 and sueemp<=@vsue2
End
go

-----Ejecutar para mostrar los registros que ganan entre 1000 y 2000-----------
Execute Sp_muestradin3 1000,2000
Go
-----Ejecutar para mostrar los registros que ganan entre 500 y 1000-----------
Execute Sp_muestradin3 500,1000
Go

2.4 Mostrar los empleados nacidos el año enviado al procedimiento


Create procedure Sp_muestradin4
@vann int
As
Begin
select * from empleados where year(fnacemp)=@vann
End
SENATI - TRUJILLO
go
-----Ejecutar para mostrar los registros que nacieron el año 1980----------- 6
Execute Sp_muestradin4 1980
go

2.5 Mostrar los empleados según el sexo y el rango de años enviados al procedimiento

Create procedure Sp_muestradin5


@vann1 int, @vann2 int,@vsex bit
As
Begin
select * from empleados where year(fnacemp)>=@vann1 and year(fnacemp)<=@vann2 and
sexemp=@vsex
End
go

-----Ejecutar para mostrar los registros que ganan entre 1000 y 2000 y son hombres-----------
Execute Sp_muestradin5 1000,2000,1
go

3.- Para Modificar registros


3.1 Aumentar el sueldo de todos los empleados en una cantidad determinada enviada al
procedimiento

Create procedure Sp_modificadin


@vaum numeric(9,2)
as
Begin
Update empleados set sueemp=sueemp + @vaum
End
go
-----Ejecutar para aumentar sueldo de todos los empleados en una cantidad dada-----------
Execute Sp_modificadin 150
go
----------Comprobar----------
Select * from empleados
go

3.2 Modificar los datos de un empleado de acuerdo al campo clave enviado

Create procedure Sp_modificadin2


@vid int,@vape varchar(40),@vsue numeric(9,2),@vsex bit,@vfec datetime
as
begin
SENATI - TRUJILLO
Update empleados set apeemp=@vape,sueemp=@vsue,sexemp=@vsex,fnacemp=@vfec where
idemp=@vid 7
end
go

-----Ejecutar para enviar la información a modificar en el registro del empleado según el código
enviado-----------
Execute Sp_modificadin2 2, 'Campos Flores', 1500, 1,'26/09/1980'
Go
----------Comprobar----------
Select * from empleados
go

4.- Para eliminar registros


4.1 Eliminar un registro de acuerdo al campo clave enviado al procedimiento

Create procedure Sp_eliminadin


@vid int
as
begin
delete from empleados where idemp=@vid
end
go

-----Ejecutar para eliminar registro por campo clave-----------


Execute Sp_eliminadin 3
go

----------Comprobar----------
Select * from empleados
go

4.2 Eliminar los registros de acuerdo al sexo enviado


Create procedure Sp_eliminadin2
@vsex bit
as
begin
delete from empleados where sexemp=@vsex
end
go

-----Ejecutar para eliminar registro de los hombres-----------


Execute Sp_eliminadin2 1
go

----------Comprobar----------
SENATI - TRUJILLO
Select * from empleados
go 8

Practica3: Crear Procedimientos almacenados para manejar las


instrucciones SQL con parámetros de salida.
Practica 3.1: Se desea crear un procedimiento almacenado que muestre la cantidad de registros de
la tabla empleado

create procedure sp_cuenta


@nreg int output
as
select @nreg=count(*) from empleados
go

-----Ejecutar para capturar la cantidad de registros de la tabla empleados-----------


declare @nreg int
execute sp_con @nreg output
print @nreg

Practica 3.2: Se desea crear un procedimiento almacenado que muestre la cantidad de registros de
que ganan más de 1000

create procedure sp_cuenta2


@nreg int output
as
select @nreg=count(*) from empleados where sueemp>1000
go

-----Ejecutar para capturar la cantidad de registros de los que ganan más de 1000-----------

declare @nreg int


execute sp_cuenta2 @nreg output
print @nreg

Practica 3.3: Se desea crear un procedimiento almacenado que muestre el total de los sueldos que
se paga a los empleados

create procedure sp_total


@vtot numeric(9,2) output
as
select @vtot=sum(sueemp) from empleados
go
SENATI - TRUJILLO
declare @vtot numeric(9,2)
execute sp_total @vtot output 9
print @vtot

Practica4: Crear un Procedimientos almacenado para manejar todas las


instrucciones SQL
create procedure sp_empleado
@ban int,@vid int,@vape varchar(40),@vsue numeric(9,2),@vsex bit,@vfec datetime
as
Begin
if @ban=1 insert into empleados values(@vid,@vape,@vsue,@vsex,@vfec)
if @ban=2 select * from empleados
if @ban=3 update empleados set
apeemp=@vape,sueemp=@vsue,sexemp=@vsex,fnacemp=@vfec where idemp=@vid
if @ban=4 delete from empleados where idemp=@vid
End
go

--------Comprobar para insertar------------------


execute sp_empleado 1,7,'Nureña Polo',1900,1,'11/11/1986'
go

--------Comprobar para consultar------------------

execute sp_empleado 2,0,'',0,0,''


go

--------Comprobar para actualizar-----------------

execute sp_empleado 3,7,'Nureña Polar',1900,1,'11/11/1986'


go

--------Comprobar para eliminar------------------

execute sp_empleado 4,7,'',0,0,''


go

Practica 5: Crear un Procedimientos almacenado para devolver un valor


Un procedimiento almacenado puede devolver valores numéricos enteros a través de la
instrucción RETURN. Normalmente debemos utilizar los valores de retorno para determinar si la
ejecución del procedimiento ha sido correcta o no. Si queremos obtener valores se recomienda
utilizar parámetros de salida o funciones escalares.
SENATI - TRUJILLO
El siguiente ejemplo muestra un procedimiento almacenado que devuelve valores.
10
CREATE PROCEDURE sp_retorno
@vid int
AS
BEGIN
IF (SELECT Sueemp FROM empleados WHERE idemp=@vid) < 0
BEGIN
RETURN 1
END
ELSE
RETURN 0
END

go

---------- Ejecutar procedimiento para que retorno un valor -------------------------

DECLARE @rv int


EXEC @rv = sp_retorno 3
PRINT @rv
Go

Practica 6: Crear un Procedimientos almacenado que incluya una vista


Se tiene la siguiente base de datos Industria, donde se han creado las tablas cargo y empleado, se
han relacionado y se ha creado una vista; se pretende crear un procedimiento almacenado que
muestre consultas con la vista

Create database industria


Go
Use industria
Go
Create table cargo(codcar int primary key, descripcion varchar(30))
Go
Create table empleado(codemp int primary key,apellidos varchar(30),
nombres varchar(30),sexo bit,
codcar int foreign key(codcar) references cargo(codcar))
Go
insert into cargo values(1,'GERENTE')
insert into cargo values(2,'CONTADOR')
insert into cargo values(3,'SECRETARIA')
insert into cargo values(4,'VENDEDOR')
insert into cargo values(5,'ALMACENERO')
go
insert into empleado values(1,'REYES ORE','JUAN CARLOS',1,2)
insert into empleado values(2,'LOPEZ MENDO','ANA CECICLIA',0,3)
insert into empleado values(3,'JUAREZ LI','JUAN PEDRO',1,5)
insert into empleado values(4,'ODRIA JIMENEZ','VICTOR JOSE',1,4)
insert into empleado values(5,'HUAMAN LINARES','SUSANA LIDIA',0,3)
SENATI - TRUJILLO
insert into empleado values(6,'VILCHEZ GARCIA','HUGO JOSE',1,4)
insert into empleado values(7,'MORENO PEREZ','MARCO SAUL',1,1) 11
insert into empleado values(8,'PALACIOS JARAMILLO','SOLEDAD',0,4)
insert into empleado values(9,'MONTERO PORRAS','FRANK JUAN',1,5)
insert into empleado values(10,'CARPIO HUAMAN','LUIS JOSE',1,4)
insert into empleado values(11,'PERALES RIOS','PEDRO MARCO',1,5)
insert into empleado values(12,'WIESSE MORAN','ALEYDA',0,4)

go
select * from cargo
go
select * from empleado
go
*/----------------------------VISTAS------------------------------*/
CREATE VIEW VISTAEMPLEADO
AS
SELECT E.CODEMP,E.APELLIDOS,E.NOMBRES,E.SEXO,C.DESCRIPCION AS CARGO
FROM EMPLEADO E,CARGO C WHERE E.CODCAR=C.CODCAR
GO
SELECT * FROM VISTAEMPLEADO
Go

Procedimiento para mostrar los registros de la vista VISTAEMPLEADO de


acuerdo al sexo enviado.

Create Procedure sp_vista1


@vsex bit
as
select * from vistaempleado where sexo=@vsex
go

-------Comprobar para mostrar los registros de las mujeres---------


execute sp_vista1 0
go

-------Comprobar para mostrar los registros de los hombres---------


execute sp_vista1 1
SENATI - TRUJILLO
Práctica de Clase 12
En una entidad de educación se desea obtener la base de datos y las tablas que lo conforman. Para
esto la información que se tiene es la siguiente:
Esta entidad educativa lo componen facultades distribuidas en escuelas académicas las cuales
registran la información de los docentes o profesores que laboran en ella. Para esto consideran
información personal como código, apellidos, nombres, sexo, así como el cargo, el área y la
nacionalidad de cada docente. Tanto el cargo, área y nacionalidad son codificados y descritos.
Según esto, la base de datos es la siguiente:

Se pide lo siguiente:
 Determinar el tipo de relación entre las tablas, por ejemplo:
Facultad Vs Escuela === Uno a Muchos
 Crear la Base de Datos
 Crear las tablas y relacionarlas
 Crear un procedimiento almacenado para cada tabla para insertar, buscar, modificar y
eliminar registros
Nota: Aquí algunos datos a insertar por ejemplo son(usted inserte más):
Para Área
1 Ciencias
2 Letras
Para Facultad
1 Ingeniería
2 Ciencias Sociales
3 Educación
Para Escuela
1 Ingeniería Química 1
2 Ingeniería Mecánica 1
3 Derecho 2
4 Sociología 2
5 Educación Inicial 3
6 Educación Primaria 3
Para Cargo
1 Jefe de Practicas
2 Coordinador Académico
3 Auxiliar
SENATI - TRUJILLO
4 Contador
13
Para Nacionalidad
1 Peruana
2 Alemana
3 Colombiana
4 Mexicana
5 Americana
6 Ecuatoriana

Para Profesor
1 Juárez Linares Juan Manuel 1 2 3 1
2 López Huamán Rosa Laura 0 3 1 2
3 Porras Ore Ana María 0 4 1 2
4 López rojas Laura Josefa 1 1 5 1

 Se pide crear las siguientes vistas


a)

b)

c)

 Crear un procedimiento almacenado que muestre todas las escuelas por facultad usando la
vista A
 Crear un procedimiento almacenado para mostrar los profesores por Nacionalidad y Area
usando la vista B
 Crear un procedimiento almacenado para mostrar los profesores por escuela indicada usando
la vista C
 Crear un procedimiento almacenado para mostrar los profesores x escuela usando la vista C

Das könnte Ihnen auch gefallen