Años atrás, le veía muy poca utilidad a la creación de funciones propias en SQLSERVER. Realmente me estaba perdiendo de una gran utilidad en la programación. El uso de funciones hoy en día me ha facilitado la programación de consultas a la base de datos que podrían ser querys complejos. Con las funciones se vuelve muy sencillo hacer una consulta, son fáciles de utilizar y la mayor ventaja radica en que son reutilizables en otros procedimientos almacenados y/o triggers.
Como ejemplo, veamos la siguiente consulta.
SELECT A.COD_TIPP, C.COD_CLIEN COD_CLIENTE,C.RAZSOC NOMBRECLIENTE,A.COD_PROD,
A.DESCRIPCION,A.STATUS,
B.CATEGORIA ABC,B.CATEGORIAHIT ABCHIT,
B.CATEGORIABCVALOR ABCVALOR,
dbo.BUSCAR_CICLOS_PROM(A.COD_PROD) CICLOS,
dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD) PESOGRS,
(dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD)* dbo.BUSCAR_PRECIO_MAT_PRIMA_PROFEC(A.COD_PROD,getdate()))/.97 COSTOMILLMATPRIMA,
dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD)* @COSTO_KG_DERRGASTOS COSTOMILLGASTOS,
dbo.INV_EXT_BUSCARPRECIO_PROMMAY3MSALA(A.COD_PROD,GETDATE())*1000 PRECIOSALA,dbo.BUSCAR_TIEMPO_PROD_PRODUC(A.COD_PROD)
FROM PRODUCTO A ,INVENTARIO B, CLIENTE C,PRECIOS_VARIABLES D
WHERE A.STATUS NOT IN('D','I') AND A.COD_PROD=B.COD_PROD AND B.COD_EMPRE='01' AND B.COD_SUC=@COD_SUC AND B.COD_UBI='01'
AND A.COD_PROD=D.COD_PROD AND C.COD_CLIEN=D.COD_CLIENTE
------- una de las funciones utilizada en la consulta anterior
create FUNCTION [dbo].[INV_EXT_BUSCARPRECIO_PROMMAY3MSALA] (@cod_prod char(50),@FECHA_INICIO datetime)
RETURNS numeric(18,6)
AS
BEGIN
---- funcion que devuelve el precio promedio de las ventas de un producto
declare @precio numeric(18,6)
SELECT @PRECIO=ISNULL(AVG(B.VALUNI),0) FROM ENCDOCVENTA A, DETADV B
WHERE A.COD_SUC='02' AND A.NO_DOCVENTA=B.NO_DOCVENTA AND A.TIP_DV=B.TIP_DV AND
A.COD_EMPRE=B.COD_EMPRE AND A.COD_SUC=B.COD_SUC AND A.COD_UBI=B.COD_UBI
AND A.FEC_DOCVENTA>=dateadd(MM,-3,@FECHA_INICIO) AND B.COD_PROD=@COD_PROD AND B.VALUNI>0
IF @PRECIO =0
BEGIN
select @precio = isnull(preciostd,0) from PRODUCTO where COD_PROD=@COD_PROD
END
return isnull(@precio,0)
END
Gracias al uso de las funciones esta consulta tiene un nivel simple de abstracción, imagine como sería la consulta si no utilizara funciones. Hoy en día mi base de datos cuenta con más de 200 funciones propias, las cuales me facilitan hacer una consulta de manera efectiva y eficiente, sin redundar en el código ahorrando mucho tiempo en la programación, el cual es uno de los recursos más importantes para un desarrollador de sistemas . ¡ Tiempo ¡!!!!!!!!!
Por favor visita www.rapiconta.com para mas detalles
Como ejemplo, veamos la siguiente consulta.
SELECT A.COD_TIPP, C.COD_CLIEN COD_CLIENTE,C.RAZSOC NOMBRECLIENTE,A.COD_PROD,
A.DESCRIPCION,A.STATUS,
B.CATEGORIA ABC,B.CATEGORIAHIT ABCHIT,
B.CATEGORIABCVALOR ABCVALOR,
dbo.BUSCAR_CICLOS_PROM(A.COD_PROD) CICLOS,
dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD) PESOGRS,
(dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD)* dbo.BUSCAR_PRECIO_MAT_PRIMA_PROFEC(A.COD_PROD,getdate()))/.97 COSTOMILLMATPRIMA,
dbo.BUSCAR_PESO_PRODUCTO(A.COD_PROD)* @COSTO_KG_DERRGASTOS COSTOMILLGASTOS,
dbo.INV_EXT_BUSCARPRECIO_PROMMAY3MSALA(A.COD_PROD,GETDATE())*1000 PRECIOSALA,dbo.BUSCAR_TIEMPO_PROD_PRODUC(A.COD_PROD)
FROM PRODUCTO A ,INVENTARIO B, CLIENTE C,PRECIOS_VARIABLES D
WHERE A.STATUS NOT IN('D','I') AND A.COD_PROD=B.COD_PROD AND B.COD_EMPRE='01' AND B.COD_SUC=@COD_SUC AND B.COD_UBI='01'
AND A.COD_PROD=D.COD_PROD AND C.COD_CLIEN=D.COD_CLIENTE
------- una de las funciones utilizada en la consulta anterior
create FUNCTION [dbo].[INV_EXT_BUSCARPRECIO_PROMMAY3MSALA] (@cod_prod char(50),@FECHA_INICIO datetime)
RETURNS numeric(18,6)
AS
BEGIN
---- funcion que devuelve el precio promedio de las ventas de un producto
declare @precio numeric(18,6)
SELECT @PRECIO=ISNULL(AVG(B.VALUNI),0) FROM ENCDOCVENTA A, DETADV B
WHERE A.COD_SUC='02' AND A.NO_DOCVENTA=B.NO_DOCVENTA AND A.TIP_DV=B.TIP_DV AND
A.COD_EMPRE=B.COD_EMPRE AND A.COD_SUC=B.COD_SUC AND A.COD_UBI=B.COD_UBI
AND A.FEC_DOCVENTA>=dateadd(MM,-3,@FECHA_INICIO) AND B.COD_PROD=@COD_PROD AND B.VALUNI>0
IF @PRECIO =0
BEGIN
select @precio = isnull(preciostd,0) from PRODUCTO where COD_PROD=@COD_PROD
END
return isnull(@precio,0)
END
Gracias al uso de las funciones esta consulta tiene un nivel simple de abstracción, imagine como sería la consulta si no utilizara funciones. Hoy en día mi base de datos cuenta con más de 200 funciones propias, las cuales me facilitan hacer una consulta de manera efectiva y eficiente, sin redundar en el código ahorrando mucho tiempo en la programación, el cual es uno de los recursos más importantes para un desarrollador de sistemas . ¡ Tiempo ¡!!!!!!!!!
Por favor visita www.rapiconta.com para mas detalles
Comentarios
Publicar un comentario