31

Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

Embed Size (px)

Citation preview

Page 1: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título
Page 2: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma:

• Nombre1 Nombre2, Apellido1 Apellido2 bajo el título Nombre Cliente

• Calle numerocalle, ciudad bajo el titulo Direccion • Edad-calcular • Categoría • Sexo

Page 3: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Pregunta 1.

• Qué se pide?

• Select o print?• Tenemos los datos? Qué tabla es la utilizada?

• Nombre Cliente: concatenar n1, n2, a1, a2• Direccion: concatenar calle, nr, ciudad• Edad: calcular a partir de fecha nacimiento, usar funcion• Categoria: depende de que?• Sexo: depende de que?• Uso de Case

Page 4: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título
Page 5: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

select primer_nombre+' '+segundo_nombre+', '+primer_apellido+' '+segundo_apellido as 'Nombre Cliente', calle+' '+numero+', '+ciudad as Direccion, datediff(year, fecha_nacimiento, getdate()) as Edad,…

From cliente

Page 6: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

…categoria=casewhen datediff(year, fecha_nacimiento, getdate()) <17 then

'Adolescente'when datediff(year, fecha_nacimiento, getdate()) between

17 and 30 then 'Joven'when datediff(year, fecha_nacimiento, getdate()) between

31 and 60 then 'Adulto'when datediff(year, fecha_nacimiento, getdate()) >60 then

'Adulto Mayor'end

Page 7: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

sexo=

case sexo

when 'm' then 'Masculino'

when 'f' then 'Femenino'

end

Page 8: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

create procedure unoasselect primer_nombre+' '+segundo_nombre+', '+primer_apellido+' '+segundo_apellido

as 'Nombre Cliente', calle+' '+numero+', '+ciudad as Direccion, datediff(year, fecha_nacimiento, getdate()) as Edad,

categoria=casewhen datediff(year, fecha_nacimiento, getdate()) <17 then 'Adolescente'when datediff(year, fecha_nacimiento, getdate()) between 17 and 30 then 'Joven'when datediff(year, fecha_nacimiento, getdate()) between 31 and 60 then 'Adulto'when datediff(year, fecha_nacimiento, getdate()) >60 then 'Adulto Mayor'end,sexo=case sexowhen 'm' then 'Masculino'when 'f' then 'Femenino'endfrom cliente

Page 9: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Para mantener un stock actualizado de la cantidad existente de cada producto, el dueño necesita que cada vez que se quiera comprar cierta cantidad de un producto se tome en cuenta si es que existe la cantidad requerida (p.e. si tengo 15 pañuelos desechables no puedo vender 16…solo hasta 15). Si no existe la cantidad requerida, no se puede hacer la compra. Cuando se pueda hacer la compra, se debe registrar (insertar datos en registros de compra) y actualizar la cantidad en stock del producto en cuestión. Utilice IF ELSE, RETURN, PRINT, Parámetros de entrada. Tome en cuenta las condiciones que podrían surgir al hacer esto, imprimir mensajes en pantalla.

Page 10: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Pregunta 2.

• Qué se pide? (qué entendieron del problema)• Qué tablas participan?• Uso de Insert, Update, Delete?• Uso de parametros de entrada?• Qué datos participan?• Cuál es la condicion pedida? • Cuáles son las condiciones básicas?

Page 11: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• create procedure dos (@rut varchar(10), @producto varchar(8), @fecha smalldatetime, @cant int, @pago char(1))

Page 12: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Condicion pedida: existe en stock la cantidad del producto que se va a comprar?

• if ((select stock from producto where codigo_producto=@producto)-@cant)>=0

Page 13: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Otras condiciones

• Verificar si existe otro registro con las mismas claves…• if not exists (select * from compra where rut_cliente=@rut and

codigo_producto=@producto and fecha_compra=@fecha)

• Verificar si existe cliente• if exists (select * from cliente where rut_cliente=@rut)

• Verificar si existe producto• if exists (select * from producto where

codigo_producto=@producto)

Page 14: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Acciones a realizar si se cumple primera condicion

insert into compra (rut_cliente, codigo_producto, fecha_compra, cantidad, forma_pago)

values (@rut, @producto, @fecha, @cant, @pago)

update producto set stock=stock-@cant where codigo_producto=@producto

• Sino, no se inserta registro en compra ni se actualiza stock

Page 15: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

create procedure dos (@rut varchar(10), @producto varchar(8), @fecha smalldatetime, @cant int, @pago char(1))asif not exists (select * from compra where rut_cliente=@rut and codigo_producto=@producto and fecha_compra=@fecha) begin if exists (select * from cliente where rut_cliente=@rut) begin if exists (select * from producto where codigo_producto=@producto) begin if ((select stock from producto where codigo_producto=@producto)-@cant)>=0 begin insert into compra (rut_cliente, codigo_producto, fecha_compra, cantidad, forma_pago) values (@rut, @producto, @fecha, @cant, @pago) update producto set stock=stock-@cant where codigo_producto=@producto return 0 /*ok*/ end else return 4 end else return 1 /*no existe producto*/ end else return 2 /*no existe el cliente*/ endelsereturn 3

Page 16: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

declare @status intdeclare @ahora smalldatetimeset @ahora=getdate()exec @status=tres '03777228-7', '74747GBF', @ahora , 1, 't'print @statusif @status=0print 'Registro de compra ingresado correctamente.'elseif @status=1print 'Prducto no existe'elseif @status=2print 'Cliente no existe'elseif @status=3print 'Registro ya ingresado'elseif @status=4print 'No se puede registrar la compra, no hay productos suficientes'

Page 17: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Después de un largo análisis, el dueño decidió cada cierto tiempo bajar en un 10% el precio de aquellos productos que estén vencidos a ese día, y que sean de una marca especifica. Si se dan esas condiciones, desea que le muestre el nombre de los productos actualizados con su nuevo precio. Sino, imprime mensaje en pantalla. Como funcionara esto? Un día cualquiera el dueño decidirá bajar precios. Para ello utilizara el PA creado por usted y el solo ingresara la marca a considerar. Si hay productos de esa marca que estén vencidos a ese día, se le bajara el precio un 10%. Utilice IF ELSE, RETURN, PRINT, Parámetros de entrada. Tome en cuenta las condiciones que podrían surgir al hacer esto, imprimir mensajes en pantalla.

Page 18: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Pregunta 3.

• Qué se pide? (qué entendieron del problema)• Qué tablas participan?• Uso de Insert, Update, Delete?• Uso de parametros de entrada?• Qué datos participan?• Cuál es la condicion pedida? • Cuáles son las condiciones básicas?

Page 19: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• create procedure tres (@marca varchar(15))

Page 20: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Condicion pedida: existen productos vencidos al dia de hoy (cuando ejecuto el PA) de la marca especifica

if exists (select * from producto where fecha_vencimiento<getdate() and marca=@marca)

Page 21: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Otras condiciones

• Verificar si existe la marca• if exists (select * from producto where marca=@marca)

Page 22: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Acciones a realizar si se cumple primera condicion

update productoset precio=precio*0.9where fecha_vencimiento<getdate()and marca=@marcaselect * from producto where fecha_vencimiento<getdate()and marca=@marca

• Sino…?

Page 23: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

create procedure tres (@marca varchar(15))asif exists (select * from producto where fecha_vencimiento<getdate()and marca=@marca)beginupdate productoset precio=precio*0.9where fecha_vencimiento<getdate()and marca=@marcaselect * from producto where fecha_vencimiento<getdate()and marca=@marcareturn 0end elsereturn 1

Page 24: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

declare @status intexec @status=cuatro 'nestle'if @status=0print 'Precios cambiados'elseif @status=1print 'No hay productos que cumplan con requisitos'

Page 25: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Algunos clientes pagan su compra en efectivo ‘e’, con tarjeta de crédito ‘t’ o con redcompra ‘r’. El dueño no confía en las tarjetas de crédito, por lo que no permite compras con tarjeta de crédito que superen 10 unidades de un producto. Genere un PA que controle este hecho al insertar una nueva compra. Ejemplo: se inserta en la tabla compra el cliente y, el producto x, la fecha actual (momento de la compra), cantidad del producto y forma de pago. Si ocurre la condición dada, debe imprimir un mensaje por pantalla y no permitir la compra. Utilice IF ELSE, RETURN, PRINT, Parámetros de entrada. Reutilice el código…

Page 26: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Bonus.

• Qué se pide? (qué entendieron del problema)• Qué tablas participan?• Uso de Insert, Update, Delete?• Uso de parametros de entrada?• Qué datos participan?• Cuál es la condicion pedida? • Cuáles son las condiciones básicas?

Page 27: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Condicion pedida: supera la cantidad del producto a comprar las 10 unidades y y la forma de pago es tarjeta de credito?

• if (@pago='t') and (@cant>10)

Page 28: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Condiciones basicas: igual que problema 2.

Page 29: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• Acciones a realizar si no se cumple primera condicion

insert into compra (rut_cliente, codigo_producto, fecha_compra, cantidad, forma_pago)

values (@rut, @producto, @fecha, @cant, @pago)

• Sino, no se inserta registro en compra…

Page 30: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• create procedure bonus (@rut varchar(10), @producto varchar(8), @fecha datetime, @cant int, @pago char(1))• as• if not exists (select * from compra where rut_cliente=@rut and codigo_producto=@producto and

fecha_compra=@fecha)• begin• if exists (select * from cliente where rut_cliente=@rut)• begin• if exists (select * from producto where codigo_producto=@producto)• begin • if (@pago='t') and (@cant>10) • return 4 /*pago con tarjeta credito no puede superar cantidad 10*/• else• insert into compra (rut_cliente, codigo_producto, fecha_compra, cantidad, forma_pago)• values (@rut, @producto, @fecha, @cant, @pago)• return 0 /*ok*/• end• else• return 1 /*no existe producto*/• end • else• return 2 /*no existe el cliente*/• end• else• return 3

Page 31: Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título

• declare @status int• declare @ahora smalldatetime• set @ahora=getdate()• exec @status=dos '03777228-7', '93823HBF', @ahora, 17, 't'• print @status• if @status=0• print 'Registro de compra ingresado correctamente.'• else• if @status=1• print 'Prducto no existe'• else• if @status=2• print 'Cliente no existe'• else• if @status=3• print 'Registro ya ingresado'• else• if @status=4• print 'No se puede comprar mas de 10 productos con ese tipo de pago'