Ayuda de Base de Datos
Procedimientos Almacenados
Hola, aqui una practica de bases de datos, en donde intentamos explicar los procedimientos
almacenados. Todo texto que se encuentre despues de (--) es un comentario, no es necesario
que se lo aprendan, solo es para explicar el codigo.
Esperamos que les sirva:
-------------------------------------------------------------------------------------------------------------
-- abriendo base de datos PRACTICA9
use practica9
-- Procedimientos almacenados, son programas que estan almacenados en la base de datos,
-- son recidentes en el servidor.
-- Sql, usa el leguaje de programacion TRANSACT - SQL
-- Para crear un Programa(procedimiento) usamos el comando proc
create proc programa1
-- aqui van los parametros si los hay
-- escribimos AS para iniciar el codigo del programa
as
-- Inicio
-- la declaracion de variables es de forma explicita
-- para declarar las variables se usa "DECLARE @varname tipo"
declare @xcalculo numeric
-- para asignar un valor a la variable usamos SET
set @xcalculo = 23
-- para imprimir mensajes o valores de variables usamos PRINT
print 'El valor de la variable es:'
print @xcalculo
-- tambien se le asigna valor a la variable con SELECT
select @xcalculo = sum(cantidad) from detalle_pedido
-- despues de o "=" se debe usar una funcion de agregado 100pre
print 'Ahora tiene'
print @xcalculo
-- Fin
-- Para ejecutar un programa, lo mandamos a llamar con EXEC PROGRAMNAME
exec programa1
-------------------------------------------------------------------------------------------------------------
-- Ejercicios
-- 1. Crear un Procedimiento almacenado, que reciba de parámetro un Número de Pedido y que
-- actualice el total de venta, en la tabla Pedido, de acuerdo a la sumatoria de la cantidad de
-- productos por el precio de venta de cada uno.
-- Solucion:
--para el analisis vemos el contenido de las tablas:
select * from pedido
-- cambiamos el contenido de una columna
update pedido set total = null
select * from detalle_pedido
-- inicio
create proc ejercicio1
-- parametros: son variables que estan en la cabecera del programa
-- medios que usan los programas para poderce comunicar con los medios externos
@xorden char(10)
-- cuerpo del programa
as
-- declaracion de variables
declare @xtotal numeric
-- calcular la suma de los productos en la orden
select @xtotal = sum(cantidad * precio_venta) from productos, detalle_pedido
where id_producto = id_prod and num_orden = @xorden
-- validamos si la orden existe o no
if(@xtotal is null)
print 'La Orden' + @xorden + 'No Existe'
else
-- para meter varias instrucciones se usa la llave de apretura BEGIN
begin
update pedido set total=@xtotal where num_orden = @xorden
-- para terminar usamos la llave de cierre END
end
-- fin del programa
-- ahora ejecuto el programa con el parametro de valor 06
exec ejercicio1 '06'
--Vemos el resultado
select * from pedido
-- ahora ejecuto el programa con el parametro de valor 02
exec ejercicio1 '02'
--Vemos el resultado
select * from pedido
-- ahora ejecuto el programa con el parametro de valor 05
exec ejercicio1 '05'
--Vemos el resultado
select * from pedido
-------------------------------------------------------------------------------------------------------------
--2. Crear un Procedimiento almacenado, que reciba de parámetro el Id de oficina y que actualice
-- la venta total de cada oficina.
-- Solucion:
--para el analisis vemos el contenido de las tablas:
select * from vendedores
select * from sucursales
-- cambiamos el contenido de una columna
update sucursales set venta_total = null
-- para borrar el programa DROP PROC PROGRAMNAME
-- para corregir algun error, en vez de borrar el programa ALTER PROC PROGRAMNAME
create proc ejercicio2
@idoff char(3)
as
-- inicio
declare @sumtotal numeric
select @sumtotal = sum(venta_neta) from vendedores a, sucursales b
where a.id_oficina = b.id_oficina and b.id_oficina = @idoff
if(@sumtotal is null)
print 'La Oficina' + @idoff + 'No Existe'
else
begin
update sucursales set venta_total=@sumtotal where id_oficina = @idoff
end
-- fin
-- ejecutamos el programa
exec ejercicio2 '101'
-- vemos el resultado
select * from sucursales
---------------------------------------------------------------------------------------------------