PDA

Ver la Versión Completa : Trabajo con cursores...


dunia_lv
22-03-2005, 14:26:32
Hola a todos:

Mi problemas es el siguiente. Necesito hacer algunas consultas dependientes, es decir, yo quiero que dado el IdModRpt, me devuelva todas los IdArea que están asociados a él, luego dada cada una de esos IdArea quiero que me devuelva todos los IdUC que tienen esa area y que dada también las mismas IdArea me devuelva todos los IdFam que los contienen y luego recorrer cada una de las familias. Bien eso sé que puedo hacerlo de forma separado y recorre cada consulta hasta llegar al resultado final, pero me han dicho que lo mejor sería trabajar con cursores algo que nunca he hecho y aunque he tratado de realizarlo yo sola no me sale de ninguna manera...que me dicen ustedes?

la configuración de las tablas es esta

tabla 1

IdModRpt
IdArea

tabla 2

IdArea
IdFam


Tabla 3

IdArea
IdUC

saludos

Dunia

droguerman
12-05-2006, 03:18:46
los cursores permiten trabajar fila x fila en una fuente de registros

(http://www.clubdelphi.com/foros/#)--primero hay que declarar los cursores
DECLARE cur_Tabla1 CURSOR FOR
SELECT IdModRpt, IdArea FROM tabla1;
--luego las variables para almacenar los valores le pones cualquier nombre
DECLARE @t1IdModRPT INT, @t1IdArea INT;
DECLARE @t2IdArea INT, @t2IdFam INT;
--ahora abrir los cursores OPEN cur_tabla1;
--ahora hacer un fetch para volcar los valores del registro en las variables
FETCH NEXT FROM cur_Tabla1 INTO @t1IdModRPT, @t1IdArea;
--vemos si pudo recuperar o botó un error
WHILE @@FETCH_STATUS=0
BEGIN
DECLARE cur_Tabla2 CURSOR FOR
SELECT IdArea, IdFam FROM tabla2 WHERE idArea=@idArea;
OPEN cur_tabla2;
LOOP_FETCH:
FETCH NEXT FROM cur_Tabla2 INTO @t2IdArea, @t2IdFam;
SELECT * FROM tabla3
WHERE idArea=@t2IdArea;
IF @@fetch_status=0 GOTO LOOP_FETCH;
CLOSE cur_tabla2;
DEALLOCATE cur_tabla2;
END;
close cur_tabla1;
deallocate cur_tabla1;



pero los cursores son costosos en memoria personalmente creo que es mejor usar selects o tablas temporales
ojala os sirva