01-12-2014, 11:48
Hola como están?
Necesito una ayuda con un ejercicio de SQL que tomaron en un final.
El ejercicio dice... "Se ha solicitado a un programador que desarrolle una función que dado un ID de producto retorne el grado de composición del mismo. Si el elemento no es compuesto deberá retornar 0, si el elemento está compuesto por otro/s no compuesto/s deberá retornar 1 y así sucesivamente respetando los niveles del árbol de composición. El programador desarrolló la siguiente función...:
... Sabiendo que no hay errores de sintaxis, y conociendo el DER informado [es el mismo que en los ejercicios que toma en clase, del producto compuesto] defina si la función cumple con lo solicitado. En caso que su respuesta sea positiva, detalle como mejoraría la misma para que sea más performante. En caso que su respuesta sea negativa, detalle cual es la falla o potencial falla y cómo lo solucionaría".
Ahora bien.... Hice una prueba de escritorio y este script funciona BIEN, por lo cual debería analizar como hacer más performante esto....
Si hay alguna "potencial falla" la verdad no la veo.
¿Alguna idea de qué se podría responder?
¿Conocen algún ejercicio similar en otro final?
Necesito una ayuda con un ejercicio de SQL que tomaron en un final.
El ejercicio dice... "Se ha solicitado a un programador que desarrolle una función que dado un ID de producto retorne el grado de composición del mismo. Si el elemento no es compuesto deberá retornar 0, si el elemento está compuesto por otro/s no compuesto/s deberá retornar 1 y así sucesivamente respetando los niveles del árbol de composición. El programador desarrolló la siguiente función...:
create function dbo.Nivel_composicion(@idElem int)
returns int as
BEGIN
declare @id_composicion int,
@id_componente int
declare @grado int,
@max_grado int
declare composicion cursor
for
select c.comp_producto, c.comp_componente
from Composicion c
WHERE c.comp_producto = @idElem
set @grado = 0
open composicion
fetch composicion into @id_composicion, @id_componente
if @@FETCH_STATUS != 0
BEGIN
close composicion
deallocate composicion
return 0
END
set @max_grado = 1
WHILE @@FETCH_STATUS = 0
begin
if exists (SELECT * FROM Composicion c WHERE c.comp_producto = @id_componente)
BEGIN
SET @grado = 1 + dbo.Nivel_composicion(@id_componente)
END
IF(@grado > @max_grado)
BEGIN
SET @max_grado = @grado
END
FETCH composicion into @id_composicion, @id_componente
END
close composicion
deallocate composicion
return @max_grado
END
... Sabiendo que no hay errores de sintaxis, y conociendo el DER informado [es el mismo que en los ejercicios que toma en clase, del producto compuesto] defina si la función cumple con lo solicitado. En caso que su respuesta sea positiva, detalle como mejoraría la misma para que sea más performante. En caso que su respuesta sea negativa, detalle cual es la falla o potencial falla y cómo lo solucionaría".
Ahora bien.... Hice una prueba de escritorio y este script funciona BIEN, por lo cual debería analizar como hacer más performante esto....
Si hay alguna "potencial falla" la verdad no la veo.
¿Alguna idea de qué se podría responder?
¿Conocen algún ejercicio similar en otro final?