Claro que si alvaro. La forma como lo tengo actualmente. t_enero_nino = markov_generar_tablas(codigo_estacion,'1','1',pun_cor_bsol,pun_cor_tmax,pun_cor_tmin,pun_cor_tmed,pun_cor_prec,pun_cor_hmed); t_enero_nina = markov_generar_tablas(codigo_estacion,'1','2',pun_cor_bsol,pun_cor_tmax,pun_cor_tmin,pun_cor_tmed,pun_cor_prec,pun_cor_hmed); t_enero_neutro = markov_generar_tablas(codigo_estacion,'1','3',pun_cor_bsol,pun_cor_tmax,pun_cor_tmin,pun_cor_tmed,pun_cor_prec,pun_cor_hmed); . . . Esto lo repito 36 veces en 36 diferentes variables. Cada variable me almacena una estructura como esta. "{"(\"{2.05416666666667,1.38778230148394,0,4}\",\"{{4,10,7,26,10,23,27,170},{2,7,4,20,7,17,20,262},{60,35,23,40,36,27,40,78},{5,6,6,17,6,17,17,265},{134,41,33,22,42,14,22,31},{53,16,12,11,15,7,10,29}}\")","(\"{7.52770562770563,1.44890165895275,4.1,10.1}\",\"{{4,10,7,26,10,23,27,170},{2,7,4,20,7,17,20,262},{60,35,23,40,36,27,40,78},{5,6,6,17,6,17,17,265},{134,41,33,22,42,14,22,31},{53,16,12,11,15,7,10,29}}\")","(\"{27.0969696969697,1.47000953408574,23,28.5}\",\"{{4,10,7,26,10,23,27,170},{2,7,4,20,7,17,20,262},{60,35,23,40,36,27,40,78},{5,6,6,17,6,17,17,265},{134,41,33,22,42,14,22,31},{53,16,12,11,15,7,10,29}}\")","(\"{31.3159090909091,1.2385397063019,28.6,34.5}\",\"{{4,10,7,26,10,23,27,170},{2,7,4,20,7,17,20,262},{60,35,23,40,36,27,40,78},{5,6,6,17,6,17,17,265},{134,41,33,22,42,14,22,31},{53,16,12,11,15,7,10,29}}\")","(\"{16.39875,0.930002197873841,13.5,17.5}\",\"{{4,10,7,26,10,23,27,170},{2,7,4,20,7,17,20,262},{60,35,23,40,36,27,40,78},{5,6,6,17,6,17,17,265},{134,41,33,22,42,14,22,31},{53,16,12,11,15,7,10,29}}\")","(\"{18.7292817679558,0.695440734074496,17.6,20.5}\",\"{{4,10,7,26,10,23,27,170},{2,7,4,20,7,17,20,262},{60,35,23,40,36,27,40,78},{5,6,6,17,6,17,17,265},{134,41,33,22,42,14,22,31},{53,16,12,11,15,7,10,29}}\")"}"
La primera parte (del tipo de dato creado por mi) corresponde a un arreglo de dlouble precision que me almacena información especifica de cada una de las 36 corridas de la función anterior. La segunda parte es un array de integer[] que de igual forma me almacena unas tablas de conteo por cada una de las 36 variables creadas. Tengo un cursor cur_0 CURSOR FOR SELECT fec_clima, bri_sol_clima, tem_max_clima, tem_min_clima, tem_med_clima, pre_clima, hum_rel_clima, evento_clima FROM clima WHERE cod_estacion=codigo_estacion; que me debe recorrer registro por registro e identificar en que celda existe un dato faltante. (Yo los he marcado como -99) Dentro de cada registro del cursor, debo comparar si cada una de las 6 variables es -99. Pero esto debo hacerlo para cada una de las 36 combinaciones posibles. ETCH ABSOLUTE 3 FROM cur_0 INTO v_fecha,v_bsol,v_tmax,v_tmin,v_tmed,v_prec,v_hmed,v_evento; WHILE found LOOP FOR i IN (absolute_cont-3)..(absolute_cont-1) LOOP FETCH ABSOLUTE (absolute_cont - cont) FROM cur_0 INTO v_fecha,v_bsol,v_tmax,v_tmin,v_tmed,v_prec,v_hmed,v_evento; ---------------------------------------- --Validacion de mes de enero brillo ---- ---------------------------------------- IF v_bsol = -99 AND EXTRACT(month FROM v_fecha)=1 THEN IF v_evento = 1 THEN v_bsol := markov_generar_datos('bri_sol_clima',t_enero_nino,v_eventos_anteriores); UPDATE clima SET bri_sol_clima = v_bsol,bri_est_clima='S' WHERE CURRENT OF cur_0; END IF; IF v_evento = 2 THEN v_bsol := markov_generar_datos('bri_sol_clima',t_enero_nina,v_eventos_anteriores); UPDATE clima SET bri_sol_clima = v_bsol,bri_est_clima='S' WHERE CURRENT OF cur_0; END IF; IF v_evento = 3 THEN v_bsol := markov_generar_datos('bri_sol_clima',t_enero_neutro,v_eventos_anteriores); UPDATE clima SET bri_sol_clima = v_bsol,bri_est_clima='S' WHERE CURRENT OF cur_0; END IF; END IF; ---------------------------------------- --Validacion de mes de enero tmax ---- ---------------------------------------- IF v_tmax = -99 AND EXTRACT(month FROM v_fecha)=1 THEN IF v_evento = 1 THEN v_tmax := markov_generar_datos('tem_max_clima',t_enero_nino,v_eventos_anteriores); UPDATE clima SET tem_max_clima = v_tmax,tma_est_clima='S' WHERE CURRENT OF cur_0; END IF; IF v_evento = 2 THEN v_tmax := markov_generar_datos('tem_max_clima',t_enero_nina,v_eventos_anteriores); UPDATE clima SET tem_max_clima = v_tmax,tma_est_clima='S' WHERE CURRENT OF cur_0; END IF; IF v_evento = 3 THEN v_tmax := markov_generar_datos('tem_max_clima',t_enero_neutro,v_eventos_anteriores); UPDATE clima SET tem_max_clima = v_tmax,tma_est_clima='S' WHERE CURRENT OF cur_0; END IF; END IF; Como vez, en el poco codigo, he validado 2 de las 6 variables para el mes de enero. Actualmente valido de esta forma los 12 meses del año por cada variable. Si te fijas en la función markov_generar_datos recibe como segundo parámetro t_enero_nino que varía en cada una de las condiciones que menciono. (36 en total) La idea de las tablas temporales es poder crear una tabla con el tipo de dato creado y hacer unicamente 36 inserciones al principio. El numero de validaciones se reduce de (12*3)*3 internas (para un total de 108) a 6 validaciones. teniendo la posibilidad dentro de la función markov_generar_datos de elegir una de las 36 variables según los parametros de entrada. No se si hayas recibido mi anterior post donde digo que ya he probado con CREATE LOCAL TEMPORARY TABLE y me soluciona el problema. Sin embargo explico también que según la documentación oficial me pasan cosas que no deberían y me preocupa que se trate de algún tipo de bug. Gracias por tu paciencia y ayuda. saludos El 26 de octubre de 2010 10:44, Alvaro Herrera <alvhe...@commandprompt.com>escribió: > Excerpts from Daniel Orozco's message of mar oct 26 12:24:34 -0300 2010: > > Alvaro... tal vez no recibiste mi segundo post donde explico que la razón > de > > utilizar tablas temporales es hacer mi código mucho mas legible. En estos > > momentos tengo una función que supera las 1300 lineas de código. usando > SQL > > dinamico y trabajando de esta forma, esto me evitaría mas de 36 > validaciones > > repetitivas de los datos haciendo mi codigo mas legible y administrable a > > posibles cambios. > > Recibí el otro post. Ya entendí que quieres hacer código más legible. > Lo que no me queda claro es por qué quieres usar una tabla temporal y no > algún otro mecanismo para guardar los datos que quieres pasar de un lado > a otro. Creo que estás hablando demasiado en abstracto; quizás un > extracto de código ejemplo de lo que estás reemplazando sería útil para > darte una sugerencia más concreta. > > -- > Álvaro Herrera <alvhe...@commandprompt.com> > The PostgreSQL Company - Command Prompt, Inc. > PostgreSQL Replication, Consulting, Custom Development, 24x7 support > -- Daniel Orozco Jaramillo Ing. Sistemas y Telecomunicaciones OCE (Oracle Certified SQL Expert)