Ver Mensaje Individual
  #18 (permalink)  
Antiguo 12/11/2009, 16:01
Avatar de webness
webness
 
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
De acuerdo Respuesta: Procedimiento almacenado con ciclos anidados

despùes de todo, no necesite el procedimiento almacenado.

Resulta ser que mi panorama de trabajo es mas o menos con unas 160 tablas, las cuales manejan mucha redundancia y valores nulos, y se hacen muchas consultas de conteo, que son muy ineficientes, mi labor es optimizar, y para ello empeze a crear tablas nuevas como si fueran unas vistas materializadas de oracle, pero son cimplemente unas tablas que creo fruto de un query. como son tantas pues no conoxco todo el sistema.

al fin de cuentas mi solucion fue, crear otra tabla, y con ella actualizar los valores de otras 3 tablas y ya, me vali del uso de vistas.

de todos modos estoy en proceso de aprendizaje con el EL PL/PGSQL, y mi procedimiento quedo asi por si a agluein le sirve:

Código sql:
Ver original
  1. CREATE OR REPLACE FUNCTION p_update_locales_in_count() RETURNS INTEGER AS $BODY$
  2. DECLARE
  3.     query_count         RECORD;
  4.     query_has_locales   RECORD;
  5.     real_data           RECORD;
  6. BEGIN
  7.    
  8.     FOR query_count IN  SELECT  co.neighborhood_code,co.city_code
  9.                         FROM    conteo_manzanas_barrio_co co,sm_city ci
  10.                         WHERE   co.city_code = ci.pk_city AND has_locales = TRUE
  11.                         LIMIT 1 OFFSET 0 LOOP
  12.        
  13.         SELECT  INTO real_data  sl.pk_locale,sl.name
  14.         FROM    sm_locale sl,sm_neighborhood sn,servcon_barrios sb
  15.         WHERE   sn.pk_neighborhood = query_count.neighborhood_code AND
  16.                 sl.fk_pk_city = query_count.city_code AND
  17.                 sb.cod_localidad = sl.locale_code AND
  18.                 sb.cod_barrio = sn.neighborhood_code AND
  19.                 sl.name = sb.nom_localidad;
  20.                
  21.         UPDATE  conteo_manzanas_barrio_co
  22.         SET     locale_code = real_data.pk_locale, locale_name = real_data.name
  23.         WHERE   neighborhood_code = query_count.neighborhood_code;
  24.        
  25.     END LOOP;
  26.  
  27.     RETURN 0;  
  28. END $BODY$
  29. LANGUAGE plpgsql;