Está en la página 1de 12

::I DAT::ProgramadeComputacineI nformtica

Docente:Ram rezChero,Lui sAl berto


1
LENGUAJEDE
PROGRAMACI NI I
PROCEDIMIENTOSALMACENADOS
Prof.LuisAlbertoRamrezChero
I nstructor
ramirez@idat.edu.pe
ProgramadeComputacineI nformtica
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
2
Debesdetenerencuentaquenuestros
contenidoshansidotrabajadosyrevisadoscon
lafinalidaddequeseanmuyfcilesde
comprender
Iniciamos,adelante!!!
Estimado alumno,
buenda.Mepresento:
Yo soy IDATINO y te
ayudareenestecurso,
espero me acompaes
yaprendamosjuntos:
En este mdulo veremos
elTema:
Procedimientos
Almacenados
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
3
PROCEDIMIENTOSALMACENADOS
(STOREPROCEDURE)
Un procedimiento almacenado es un objeto perteneciente en la base de
datos, que contiene un conjunto de instrucciones SQL, tanto de consulta,
como de manipulacin de datos, como de control de la secuencia del
programa,asociadosaunnombre,yquesonejecutadosenconjunto.Puede
contener parmetros tanto de entrada como de salida (parmetros pasados por referencia), as
comodevolverunvalorderetorno.
Los procedimientos almacenados tambin pueden alterar la estructura de la base de datos. Por
ejemplo,puedenutilizarunprocedimientoalmacenadoparaaadirunacolumnadetablaoborrar
unatabla.Delamismamaneraunprocedimientoalmacenadopuedellamaraotroprocedimiento
almacenado,ascomoaceptarentradasydevolvermltiplesvaloresalprocedimientollamadoen
formadeparmetrosdesalida.
Lasintaxisparacrearunprocedimientoalmacenadoes:
Lasintaxisparalamodificacindeunprocedimientoalmacenadoes:
Lasintaxisparalaeliminacindeunprocedimientoalmacenadoes:
DROPPROCEDURE NOMBRE_PROCEDIMIENTO
ALTERPROCEDURE NOMBRE_PROCEDIMIENTO
[LISTA_DE_PARMETROS]
AS
SENTENCIASQL
[RETURN[Valor]]
CREATEPROCEDURE NOMBRE_PROCEDIMIENTO
[LISTA_DE_PARMETROS]
AS
SENTENCIASQL
[RETURN[Valor]]
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
4
Lasintaxisparaeliminarycreardenuevoelprocedimientoalmacenadoengruposeria:
Para ejecutar un procedimiento almacenado, emplee la palabra clave execute y el nombre del
procedimientoalmacenado,osimplementeespecifiqueelnombredelprocedimiento.
Sintaxis:
VentajasdeusarSP
Compilacin: La primera vez que se invoca un SP, el motor lo compila y a partir de ah, se sigue
usando la versin compilada del mismo, hasta que se modifique o se reinicie el servicio de SQL.
Estosignificaquesetendrunmejorrendimientoquelasconsultasdirectasqueusancadenascon
lasinstruccionesTSQL,quesecompilancadavezqueseinvocan.
Automatizacin:sitenemosunconjunto deinstruccionesTSQL,lascualesqueremosejecutarde
maneraordenada,unSPeslamejormaneradehacerlo.
Administracin: cuando realizamos aplicaciones con un gran nmero de lneas de cdigo, y
queremoshacercambios,soloimplicamodificarunSPynotodalaaplicacin,lo quesignificasolo
cambiamos los SP en el servidor y no tenemos que actualizar la aplicacin en todos los equipos
cliente.
Seguridad: una parte importante es que a los usuarios de nuestra aplicacin, solo les
proporcionamos los permisos para ejecutar los procedimientos almacenados y no el acceso a
todoslosobjetosdelabase.
Programabilidad: Los SP admiten el uso de variables y estructuras de control como IF,
Bucles, Case, etc. adems del manejo de transaccin y permite controlar excepciones. Y cuando
trabajamosconSPCLRpodemoshacerusodecualquierlenguaje.NETcomolosonC#yVB.NET.
EXECUTENOMBRE_PROCEDIMIENTO
IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHERETYPE='P'ANDNAME='NOMBRE_PROCEDIMIENTO')
DROPPROCEDURE NOMBRE_PROCEDIMIENTO
GO
CREATEPROCEDURE NOMBRE_PROCEDIMIENTO
AS
[LISTA_DE_PARMETROS]
AS
SENTENCIASQL
[RETURN[Valor]]
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
5
EjerciciosPropuestos ConLaBaseDeDatosBDVENTAS
1. CrearunSPqueseencargue delistarlosaos deventadetodas lasfacturas,tenerencuenta
quelosaos nosedebenderepetir
Paraejecutarelprocedimientoalmacenadoes
2. CrearunSPqueseencarguedelistarelcdigo,nombre, preciodetodoslosproductosquesu
precioseasuperioralprecioingresado
Paraejecutarelprocedimientoalmacenadoes
3. Crear un SP que se encargue de listar el cdigo, nombre, direccin y telfono de todos los
clientesquetienefactura
Paraejecutarelprocedimientoalmacenadoes
execute factura_cliente
if exists(select name from sysobjects where name='factura_cliente' and type='p')
drop procedure factura_cliente
go
create procedure factura_cliente
as
select cod_cli,nom_cli,direccion from Clientes
where cod_cli in(select distinct cod_cli from Facturas)
execute producto_precio7
if exists(select name from sysobjects where name='producto_precio' and type='p')
drop procedure producto_precio
go
create procedure producto_precio
@pre int
as
select cod_prod,descrip,precio from Producto
where precio>@pre
execute lista_ao
if exists(select name from sysobjects where name='lista_ao' and type='p')
drop procedure lista_ao
go
create procedure lista_ao
as
select distinct YEAR(fecha) ao from Facturas
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
6
4. Crear un SP que se encargue de listar el Nro de factura y las fechas(dia,mes y ao) de las
facturas,paraelloseingresaraelaoyelmes
Paraejecutarelprocedimientoalmacenadoes
5. Crear un SP que se encargue de listar el codigo,nombre, direccion y telefono de todos los
clientesquecontengalapalabraingresada
Paraejecutarelprocedimientoalmacenadoes
6. CrearunSPqueseencarguedelistarlasfacturasdependiendodelcodigodelclienteingresado,
vizualizar Nro.factura,Fecha(dia,mes,ao)
Paraejecutarelprocedimientoalmacenadoes
execute facturas_cliente 'C0002'
if exists(select name from sysobjects where name='facturas_cliente' and type='p')
drop procedure facturas_cliente
go
create procedure facturas_cliente
@cod char(5)
as
select num_fact,convert(char(10),fecha,103) Fecha from Facturas
where cod_cli=@cod
execute Busca_cliente 'sanchez'
if exists(select name from sysobjects where name='Busca_cliente' and type='p')
drop procedure Busca_cliente
go
create procedure Busca_cliente
@nom varchar(255)
as
select cod_cli,nom_cli,direccion,telefono from Clientes
where nom_cli like '%'+@nom+ '%'
execute factura_ao_mes1996,5
if exists(select name from sysobjects where name='factura_ao_mes' and type='p')
drop procedure factura_ao_mes
go
create procedure factura_ao_mes
@an int,@mes int
as
select num_fact,convert(char(10),fecha,103) Fecha,total from Facturas
where YEAR(fecha)=@an and MONTH(fecha)=@mes
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
7
7. CrearunSPqueseencarguedelistarelcdigo, nombre,ylacantidaddefacturasrealizadaspor
elcliente
Paraejecutarelprocedimientoalmacenadoes
8. CrearunSPqueseencarguedelistarelcodigo,nombre,ylacantidaddefacturasrealizadaspor
elcliente,seingresaraunnumeroynosmostraralosnprimerosquetuvieronmayorcantidad
Paraejecutarelprocedimientoalmacenadoes
execute Cantidad_Facturas_cliente 3
if exists(select name from sysobjects where name='Cantidad_Facturas_cliente' and type='p')
drop procedure Cantidad_Facturas_cliente
go
create procedure Cantidad_Facturas_cliente
@n int
as
select top (@n) with ties c.cod_cli,nom_cli,count(num_fact) Cantidad
from clientesc inner join Facturasf
on c.cod_cli=f.cod_cli
group by c.cod_cli,nom_cli
order by 3 desc
execute ranking_cliente
if exists(select name from sysobjects where name='ranking_cliente' and type='p')
drop procedure ranking_cliente
go
create procedure ranking_cliente
as
select c.cod_cli,nom_cli,count(num_fact) Cantidad
from clientesc inner join Facturasf
on c.cod_cli=f.cod_cli
group by c.cod_cli,nom_cli
order by 3 desc
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
8
9. CrearunSPqueseencarguedelistarelcodigo,nombre,ylacantidaddefacturasrealizadaspor
elcliente,paraelloseingresaraunacantidadysolonosmostraraaquellosclientequesuperen
lacantidadingresada
Paraejecutarelprocedimientoalmacenadoes
10. Crear un SP que se encargue de visualizar el detalle de la factura ingresada, visualizar Nro. de
factura,cdigo,nombre,precio,cantidad,Total(precio*cantidad)
Paraejecutarelprocedimientoalmacenadoes
execute detalle_Factura '000002'
if exists(select name from sysobjects where name='detalle_Factura' and type='p')
drop procedure detalle_Factura
go
create procedure detalle_Factura
@fact char(6)
as
select num_fact,p.cod_prod,descrip,d.precio,cant,(d.precio*cant) Total
from Productop inner join Detalled
on p.cod_prod=d.cod_prod
where num_fact=@fact
execute Cantidad_Facturas14
if exists(select name from sysobjects where name='Cantidad_Facturas' and type='p')
drop procedure Cantidad_Facturas
go
create procedure Cantidad_Facturas
@cant int
as
select c.cod_cli,nom_cli,count(num_fact) Cantidad
from clientesc inner join Facturasf
on c.cod_cli=f.cod_cli
group by c.cod_cli,nom_cli
having count(num_fact)>@cant
order by 3 desc
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
9
11. CrearunSPqueseencarguedevisualizareldetalledenfacturasingresadas, visualizarNro.de
factura,cdigo,nombre,precio,cantidad,Total(precio*cantidad)
Paraejecutarelprocedimientoalmacenadoes
12. CrearunSPqueseencarguedeGenerarelcdigodelcliente
Paraejecutarelprocedimientoalmacenadoes
execute generar_codigo_cliente
if exists(select name from sysobjects where name='generar_codigo_cliente' and type='p')
drop procedure generar_codigo_cliente
go
create procedure generar_codigo_cliente
as
Vamosadeclarar2variables
declare @codmax char(5),@codnew char(5)
VamosacapturarelmayorcodigodelaTablaclientes
set @codmax=(select max(cod_cli) from clientes)
siencasiesnulo
set @codmax=isnull(@codmax,'C0000')
VamosaGenerarelcodigo
set @codnew='C' + right(right(@codmax,4)+10001,4)
VamosalistarelnuevocodigoGenerado
select @codnew as codigo
execute detalle_N_Factura"'000001','000003','000005'"
Vamoshabilitarelusodelascomillas
set quoted_identifier off
go
if exists(select name from sysobjects where name='detalle_N_Factura' and type='p')
drop procedure detalle_N_Factura
go
create procedure detalle_N_Factura
@fact varchar(255)
as
exec("selectnum_fact,p.cod_prod,descrip,d.precio,cant,(d.precio*cant) Total
fromProductopinner joinDetalled
onp.cod_prod=d.cod_prod
wherenum_factin("+@fact +")")
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
10
13. Crear un SP que se encargue de Generar el cdigo del cliente, resolver como parmetro de
salida
Paraejecutarelprocedimientoalmacenadoes
14. CrearunSPelcualseingreseelcdigodelclienteynosdevuelvacomoparmetrodesalidael
nombredelcliente ysudireccin
Paraejecutarelprocedimientoalmacenadoes
Declare @nombre varchar(30),@direccion varchar(30)
Execute busca_cliente 'C0005',@nombre Output,@direccion
Output
print @nombre
print @direccion
if exists(select name from sysobjects where name='busca_cliente' and type='p')
drop procedure busca_cliente
go
create procedure busca_cliente
@cod char(5),
@nom char(30) output,
@dir char(30) output
as
select @nom=nom_cli,@dir=direccion from clientes
where cod_cli=@cod
Declare @codigo varchar(5)
Execute generar_codigo_cliente2@codigo Output
print @codigo
if exists(select name from sysobjects where name='generar_codigo_cliente2' and type='p')
drop procedure generar_codigo_cliente2
go
create procedure generar_codigo_cliente2
@codnew char(5) output
as
Vamosadeclarar2variables
declare @codmax char(5)
VamosacapturarelmayorcodigodelaTablaclientes
set @codmax=(select max(cod_cli) from clientes)
siencasiesnulo
set @codmax=isnull(@codmax,'C0000')
VamosaGenerarelcodigo
set @codnew='C' + right(right(@codmax,4)+10001,4)
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
11
15. Crearunprocedimientoalmacenadoelcualseencarguederegistrarauncliente
Paraejecutarelprocedimientoalmacenadoes
16. Crear un SP que nos muestre el cdigo, nombre, cantidad de facturas y el estado, el estado
dependerdelassiguientescondiciones:
Cantidad Estado
<=10 Regular
>10 Muybien
Paraejecutarelprocedimientoalmacenadoes
execute estado_venta
if exists(select name from sysobjects where name='estado_venta' and type='p')
drop procedure estado_venta
go
create procedure estado_venta
as
select c.cod_cli,nom_cli,COUNT(num_fact) Cantidad,
case when COUNT(num_fact)<=10 then 'Regular'
else 'MuyBien' end as condicion
from Clientesc inner join facturasf
on c.cod_cli=f.cod_cli
group by c.cod_cli,nom_cli
execute registra_cliente 'C0018','LuisRamirez','Av.Losclaveles','98862343','21985304'
if exists(select name from sysobjects where name='registra_cliente' and type='p')
drop procedure registra_cliente
go
create procedure registra_cliente
@cod char(5),
@nom varchar(30),
@dir varchar(30),
@tel varchar(8),
@ruc varchar(8)
as
insert into clientes(cod_cli,nom_cli,direccion,telefono,ruc,fecha_ing,FgEli)
values(@cod,@nom,@dir,@tel,@ruc,getdate(),0)
::I DAT::ProgramadeComputacineI nformtica
Docente:Ram rezChero,Lui sAl berto
12
17. Visualizar el cdigo, nombre, edad de todos los empleados, adems se agregara una columna
adicionalindicandosisiguientemensajeYaloscumplioTodavanoloscumple
Paraejecutarelprocedimientoalmacenadoes
Coneltiempo,lavidafcileslaquesehace
Msdifcildellevar
execute Listado_Empleado
if exists(select name from sysobjects where name='Listado_Empleado' and type='p')
drop procedure Listado_Empleado
go
create procedure Listado_Empleado
as
select nombre,CONVERT(char(10),fecha_naci,103) Fecha,case when ((month(fecha_naci)>month(GETDATE())) or
(month(fecha_naci)=month(GETDATE()) and day(fecha_naci)>day(GETDATE())))
then 'Noloscumple' else 'yaloscumplio' end as condicion
from Empleado