viernes, 4 de noviembre de 2011

FUNCIONES

--INVERTIR PALABRA
create function invertir(@palabra varchar(50))returns varchar(50)
as begin
declare @tamaño int
declare @posicion int
declare @cadena varchar(50)
set @tamaño = len(@palabra)
set @posicion = 0
set @cadena= ''
while @tamaño >= @posicion begin
set @cadena=substring(@palabra,@posicion,1)+ @cadena
set @posicion=@posicion+1
end
return @cadena
end
go
print dbo.invertir('DAMIAN')
go
--MÁXIMO COMÚN DIVISOR
create function mcd(@num1 as int,@num2 as int)returns int
as begin
declare @cont int,@mcm int
set @mcm=1
set @cont=2
while(@num1>=@cont or @num2>=@cont)begin
if(@num1%@cont=0 and @num2%@cont=0)begin
set @num1=@num1/@cont
set @num2=@num2/@cont
set @mcm=@mcm*@cont
end
else begin
set @cont=@cont+1
end
end
if(@mcm=1)begin
set @mcm=0
end
return @mcm
end
go
print dbo.mcd (4,6)
go
--MÍNIMO COMÚN MÚLTIPLO
create function mcm(@n1 int,@n2 int)returns int
as begin
declare @cont int,@mcm int
set @cont = 2
set @mcm = 1
while @n1>=@cont or @n2>=@cont begin
if @n1 % @cont = 0 begin
if @n2 % @cont = 0 begin
set @mcm = @mcm * @cont
set @n1 = @n1 / @cont
set @n2 = @n2 / @cont
end
else begin
set @mcm = @mcm * @cont
set @n1 = @n1 / @cont
end
end
else begin
if @n2 % @cont = 0 begin
set @mcm = @mcm * @cont
set @n2 = @n2 / @cont
end
else begin
set @cont = @cont + 1
end
end
end
return @mcm
end
go
print dbo.mcm(8,32)
go
--BINARIO
create function binario(@enteroP int)returns varchar(50)
as
begin
declare @cadena varchar(50)
set @cadena= ''
while @enteroP >= 2 begin
set @cadena = convert(varchar, @enteroP % 2) + @cadena
set @enteroP = @enteroP/2
end
set @cadena = convert(varchar, @enteroP ) + @caden
areturn @cadena
end
go
print dbo.binario(80)
go
--GENERO
create function genero(@sexo as char(1))returns varchar(10)
as
begin
declare @genero varchar(10)
set @genero=
case @sexo
when 'M' then 'MASCULINO'
when 'F' then 'FEMENINO'
end
return @genero
end
go
print dbo.genero('M')

lunes, 31 de octubre de 2011

SUB CONSULTAS

Para realizar los siguientes ejercicios, se recomienda descargar los archivosBDFacturacion_DML BDFacturacion_DDL que se encuentran en la categorÍa 
BASE DE DATOS, de este blog.


--Listar los productos con sus respectivas categorías
select codigoProducto, nombreProducto, precioProducto,
(select nombreCategoria from tbCategoria

where codigoCategoria= tbProducto.codigoCategoria) as [categoriaProducto]
from tbProducto
--Listar las categorías con sus respectivos números de productos
select codigoCategoria,nombreCategoria,
(select count(*) from tbProducto

where codigoCategoria=tbCategoria.codigoCategoria) as [numeroProductos]
from tbCategoria
--Listar los productos que ayan vendido 2 unidades
select * from(select p.nombreProducto,count(*) as [cantidad]
from tbProducto p
inner join tbDetalleFactura df on p.codigoProducto=df.codigoProducto
group by p.nombreProducto,df.codigoProducto) as productos
where cantidad = 2
--Listar los productos cuyas ventas esten entre 100 y 500
select * from(select p.nombreProducto,
isnull((select sum(importeProducto) from tbDetalleFactura

where codigoProducto=p.codigoProducto),0) as [ventaProducto]
from tbProducto p) as productos
where ventaProducto between 100 and 500
--Listar aquellos productos que hayan sido facturados
select codigoProducto, nombreProducto, precioProducto
from tbProducto
where codigoProducto in (select distinct codigoProducto from tbDetalleFactura)
--Listar los productos de la categoría 'Memorias'
select codigoProducto, nombreProducto, precioProducto
from tbProducto
where codigoProducto in(select p.codigoProducto
from tbProducto p inner join tbCategoria c on c.codigoCategoria=p.codigoCategoria
where c.nombreCategoria = 'Memorias')
 

STORED PROCEDURES

Para realizar los siguientes ejercicios, se recomienda descargar los archivosBDFacturacion_DML BDFacturacion_DDL que se encuentran en la categoria
BASE DE DATOS, de este blog.

-- Listar las facturas(número,total) correspondientes
-- al cliente con código 'c001'

create procedure procedureFactura
@codigo char(4)
as begin
declare
@cliente as varchar(50)

declare @factura as varchar(10)
declare @total as varchar(10)
declare @cont as int
declare CursorFacura cursor for
select tbCliente.nombreCliente,tbFactura.numeroFactura,tbFactura.totalFactura
from tbCliente inner join tbFactura on tbCliente.codigoCliente=tbFactura.codigoCliente
where tbCliente.codigoCliente= @codigo
open CursorFacura
set @cont=1
print ' LISTA DE FACTURAS POR CLIENTE'
print ' ============================='
fetch CursorFacura into @cliente,@factura,@total
while (@@fetch_status=0)
begin
print 'Cliente '+convert(varchar(3),@cont)+': '+ @cliente

print ' Factura #'+@factura+' Total S/.'+ @total
print ''
fetch CursorFacura into @cliente,@factura,@total

set @cont=@cont+1
end
close
CursorFacura

deallocate CursorFacura
end
--probando procedimiento
exec procedureFactura 'c001'