FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
|||
|
|||
Cursores...
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 |
#2
|
|||
|
|||
Memoria!!
Hola que tal, quisa sea la unica solucion si es que lo haces dentro del motor de BD, si es asi que debes hacerlo, los cursores ayudan bastante, pero consumen bastantes recursos de la maquina, quizas en el modelo que tu dices no lo sea, pero es para tener en cuenta.
Dime con que motor estas trabajando para ver si conozco la sintaxis propia de el, asi te adapto alguna solucion. Si no la mejor solucion es ver la ayuda de este, suelen ser bastante claras. Creo que todos trabajan de la misma manera, supongo, asi que de una manera general seria : //Definimos el Cursor DECLARE tabla1_cursor CURSOR FOR SELECT * FROM tabla1 WHERE IdModRpt = @pMod //-> parametro del SP //abrimos el cursor OPEN tabla1_cursor //primera lectura FETCH NEXT FROM tabla1_cursor INTO @idMod, @idArea // variables del SP, debes definirlas, //guardamos la lectura desde el cursor WHILE @@FETCH_STATUS = 0 BEGIN //Aqui es el cuerpo donde tratas los datos, podrias optar por definir mas //cursores aqui adentro pero no es recomendable. // lo "ideal" a mi modo de ver es declarar una tabla temporal en donde // guardes el resultado del cursor, y sobre esta tabla temporal crear // otro cursor, y asi hasta que llegues a donde quieras. FETCH NEXT FROM tabla1_cursor // continuacion del Ciclo INTO @idMod, @idArea END CLOSE tabla1_cursor DEALLOCATE tabla1_cursor GO Espero haberte aclarado algo el panorama, cualquier cosa que necesites mas ayuda, avisas. Saludos. |
|
|
|