Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/11/2009, 07:23
Avatar de webness
webness
 
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 10 meses
Puntos: 5
Respuesta: Ejemplos de Stored Procedure

yo aprendi PL/SQL DE ORACLE AQUI en http://www.devjoker.com/asp/indice_c...as_categoria=2,

si los quieres en postgresql aqui te mando 2 ejemplos reales y algo complejos

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION p_get_blocks_count(INTEGER, VARCHAR,INTEGER,VARCHAR,VARCHAR) RETURNS SETOF type_block_count AS $BODY$
  2. DECLARE
  3.     FILTER  ALIAS FOR $1;  
  4.     list    ALIAS FOR $2;
  5.     city    ALIAS FOR $3;
  6.     socioeconomic   ALIAS FOR $4;
  7.     country ALIAS FOR $5;
  8.    
  9.     sql_query VARCHAR;
  10.     query_result type_block_count;
  11. BEGIN
  12.     IF FILTER = 1 THEN
  13.         sql_query := 'SELECT    country_name,region_name,city_name,locale_name,locale_code,socioeconomic_status,city_code,total
  14.                        FROM     conteo_manzanas_localidad_'||country||'
  15.                        WHERE    locale_code IN ('||list||') AND
  16.                                 city_code = '||city||' AND
  17.                                 socioeconomic_status IN ('||socioeconomic||')';
  18.         FOR query_result IN EXECUTE sql_query LOOP RETURN NEXT query_result;
  19.         END LOOP;          
  20.     ELSE
  21.         sql_query := 'SELECT    country_name,region_name,city_name,neighborhood_name,neighborhood_code,socioeconomic_status,city_code,total,locale_name,locale_code,
  22.                        FROM     conteo_manzanas_barrio_'||country||'
  23.                        WHERE    neighborhood_code IN ('||list||') AND
  24.                                 city_code = '||city||' AND
  25.                                 socioeconomic_status IN ('||socioeconomic||')';
  26.         FOR query_result IN EXECUTE sql_query LOOP RETURN NEXT query_result;
  27.         END LOOP;              
  28.         END IF;
  29.     RETURN;
  30. END $BODY$
  31. LANGUAGE plpgsql;
  32.  
  33. SELECT * FROM p_get_blocks_count(1, $$119 ,120 ,121 ,122$$ ,739,$$'3','4','5'$$,'co')
  34. SELECT * FROM p_get_blocks_count(2, $$'000076','000063','000066','000061'$$ ,76834,$$'3','4','5'$$,'co')

OTRO

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;