Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Procedimiento almacenado

Estas en el tema de Procedimiento almacenado en el foro de Bases de Datos General en Foros del Web. Hola Foro Tengo un procedimiento almacenado el cual tiene que actualizar los municipios y colonias existentes en la base de datos, como no se si ...
  #1 (permalink)  
Antiguo 12/03/2013, 17:39
 
Fecha de Ingreso: abril-2010
Mensajes: 229
Antigüedad: 14 años, 1 mes
Puntos: 3
Procedimiento almacenado

Hola Foro

Tengo un procedimiento almacenado el cual tiene que actualizar los municipios y colonias existentes en la base de datos, como no se si han cambiado los id's hago busquedas de estos para poder insertar asignando a los municipios la colonia correcta, pero si corro el procedimiento por lineas funciona muy bien hasta la segunda inserción en donde truena desconozco porque y al ejecutarlo manda un error de llave foranea cuando este error no debe de presentarse ya que busco el ultimo id y se agrega su valor espero puedan ayudarme, esta en echo en interbase o firebird 3 aqui les dejo el codigo.
Código SQL:
Ver original
  1. CREATE PROCEDURE SEPOMEX
  2. RETURNS (
  3.     MUNICIPIOS_BASE INTEGER,
  4.     MUNICIPIOS_SEPOMEX INTEGER,
  5.     EXISTENTES_BASE VARCHAR (75),
  6.     EXISTENTES_SEPOMEX VARCHAR (36),
  7.     CONCATENADOS VARCHAR (150),
  8.     MAXID INTEGER)
  9. AS
  10.  
  11.  
  12. DECLARE variable MSepomex VARCHAR(36);
  13. DECLARE variable MBase VARCHAR(36);
  14. DECLARE variable CSColonia VARCHAR(150);
  15. DECLARE variable CBColonia VARCHAR(60);
  16. DECLARE variable Asentamiento VARCHAR(50);
  17. DECLARE variable SMunicipio VARCHAR(75);
  18. DECLARE variable NAsentamiento VARCHAR(33);
  19. DECLARE variable SZona VARCHAR(2);
  20. DECLARE variable IDClase VARCHAR(2);
  21. DECLARE variable SMunicipios VARCHAR(36);
  22. DECLARE variable BMunicipios VARCHAR(36);
  23. DECLARE variable TipoAsentamiento VARCHAR(50);
  24. DECLARE variable MSestado INTEGER;
  25. DECLARE variable ECantidad INTEGER;
  26. DECLARE variable IDSepomex INTEGER;
  27. DECLARE variable IDMunicipio INTEGER;
  28. DECLARE variable SCOficina INTEGER;
  29. DECLARE variable IDAsentamiento INTEGER;
  30. DECLARE variable CCor INTEGER;
  31. DECLARE variable SCodigo INTEGER;
  32. DECLARE variable NMunicipio INTEGER;
  33. DECLARE variable InsertaMunicipio INTEGER;
  34. DECLARE variable NuevoId INTEGER;
  35. DECLARE variable MaximoID INTEGER;
  36. DECLARE variable IDCiudad INTEGER;
  37. DECLARE variable CuentaMB INTEGER;
  38. DECLARE variable CuentaMS INTEGER;
  39.  
  40. BEGIN
  41.  
  42. FOR SELECT ID_ESTADO
  43. FROM ZZ_SPM_ENTIDADES
  44. INTO :ECantidad DO
  45.      BEGIN
  46.  
  47.      SELECT COUNT(DISTINCT ID_MUNICIPIO)
  48.      FROM ZZ_SPM_MUNICIPIOS MB
  49.      /*WHERE MB.ID_ESTADO =:ECantidad*/
  50.      WHERE MB.ID_ESTADO = 1
  51.      INTO :CuentaMB;
  52.  
  53.      SELECT COUNT(DISTINCT UPPER(D_MUNICIPIO))
  54.      FROM TEMPORAL_SEPOMEX MS
  55.      /*WHERE MS.C_ESTADO =:ECantidad*/
  56.      WHERE MS.C_ESTADO = 1
  57.      INTO :CuentaMS;
  58.      
  59.      IF(CuentaMB = CuentaMS) THEN
  60.  
  61.      FOR
  62.      SELECT DISTINCT (TS.D_MUNICIPIO), MB.NOMBRE
  63.      FROM TEMPORAL_SEPOMEX TS
  64.      INNER JOIN ZZ_SPM_MUNICIPIOS MB
  65.      ON TS.D_MUNICIPIO = MB.NOMBRE
  66.      WHERE TS.C_ESTADO =:ECantidad
  67.      INTO :SMunicipios, :BMunicipios DO
  68.      
  69.        BEGIN
  70.          IF(:SMunicipios = :BMunicipios)THEN          
  71.            BEGIN          
  72.            FOR
  73.            SELECT DISTINCT
  74.            UPPER(TS.D_ASENTAMIENTO), UPPER(TS.ID_SEPOMEX),
  75.            UPPER(TS.D_MUNICIPIO), UPPER(SC.NOMBRE), TS.C_ESTADO, TS.D_TIPO_ASENTAMIENTO
  76.            FROM TEMPORAL_SEPOMEX TS
  77.            LEFT OUTER JOIN ZZ_SPM_COLONIAS SC
  78.            ON TS.D_ASENTAMIENTO = SC.NOMBRE
  79.            WHERE TS.C_ESTADO = 1 AND SC.NOMBRE IS NULL
  80.            /*WHERE TS.C_ESTADO =:ECantidad AND SC.NOMBRE IS NULL*/
  81.            INTO :CSColonia, :IDSepomex, :SMunicipio, :CBColonia, :MSestado, :TipoAsentamiento DO
  82.              BEGIN
  83.              IF(:CBColonia IS NULL) THEN
  84.                BEGIN
  85.                  FOR SELECT MAX(ID_COLONIA)
  86.                  FROM ZZ_SPM_COLONIAS
  87.                  WHERE ID_ESTADO = 1
  88.                  /*WHERE ID_ESTADO =:ECantidad*/
  89.                  INTO :MaximoID DO
  90.                    BEGIN
  91.                      MAXID =:MaximoID;
  92.                      NuevoId =:MaximoID +1;
  93.                      FOR SELECT DISTINCT SC.ID_CIUDAD
  94.                      FROM ZZ_SPM_CIUDADES SC
  95.                      WHERE ID_ESTADO =:MSestado AND NOMBRE =:SMunicipio
  96.                      INTO :IDCiudad DO
  97.                        BEGIN
  98.                          FOR SELECT UPPER(C_MUNICIPIO)
  99.                          FROM TEMPORAL_SEPOMEX
  100.                          WHERE D_ASENTAMIENTO =:CSColonia
  101.                          AND C_ESTADO =:MSestado AND D_MUNICIPIO =:SMunicipio
  102.                          INTO :IDMunicipio DO
  103.                           BEGIN
  104.                             FOR SELECT SM.ID_MUNICIPIO
  105.                             FROM ZZ_SPM_MUNICIPIOS SM
  106.                             WHERE SM.ID_MUNICIPIO =:IDMunicipio AND SM.ID_ESTADO =:MSestado
  107.                             INTO :NMunicipio DO                            
  108.                             IF(:IDMunicipio = :NMunicipio) THEN
  109.                               BEGIN InsertaMunicipio =:NMunicipio; END
  110.                             ELSE
  111.                               BEGIN InsertaMunicipio =:NMunicipio; END
  112.                             BEGIN
  113.                               FOR SELECT TS.C_OFICINA
  114.                               FROM TEMPORAL_SEPOMEX TS
  115.                               WHERE ID_SEPOMEX =:IDSepomex
  116.                               INTO :SCOficina DO
  117.                                BEGIN                                
  118.                                  FOR
  119.                                  SELECT DISTINCT ID_ASENTAMIENTO
  120.                                  FROM ZZ_SPM_ASENTAMIENTO SA
  121.                                  INNER JOIN TEMPORAL_SEPOMEX TS
  122.                                  ON SA.NOMBRE = TS.D_TIPO_ASENTAMIENTO
  123.                                  WHERE SA.NOMBRE LIKE '%'||:TipoAsentamiento||'%'
  124.                                  INTO :IDAsentamiento DO
  125.                                    BEGIN
  126.                                      FOR SELECT DISTINCT TS.D_CODIGO
  127.                                      FROM TEMPORAL_SEPOMEX TS
  128.                                      WHERE TS.ID_SEPOMEX =:IDSepomex
  129.                                      INTO :SCodigo DO
  130.                                        BEGIN
  131.                                          FOR SELECT DISTINCT(COR)
  132.                                          FROM ZZ_SPM_COLONIAS
  133.                                          WHERE ID_ESTADO =:MSestado
  134.                                          INTO :CCor DO
  135.                                            BEGIN
  136.                                              FOR SELECT SUBSTR(TS.D_ZONA,1 ,1)
  137.                                              FROM TEMPORAL_SEPOMEX TS
  138.                                              WHERE ID_SEPOMEX =:IDSepomex
  139.                                              INTO :SZona DO
  140.                                                BEGIN
  141.                                                  INSERT INTO ZZ_SPM_COLONIAS
  142.                                                  (ID_COLONIA, ID_ESTADO, ID_CLASE, ID_CIUDAD, ID_MUNICIPIO,
  143.                                                  NOMBRE, REPARTO, SERVICIOS, OFICINA, ID_ASENTAMIENTO, CODIGO,
  144.                                                  COR, ACTUALIZADO, ZONA)
  145.                                                  VALUES(:NuevoId, :MSestado, '00', :IDCiudad, :InsertaMunicipio,
  146.                                                  :CSColonia, NULL, 0 , :SCOficina, :IDAsentamiento, :SCodigo,
  147.                                                  :CCor, CURRENT_TIMESTAMP, :SZona);
  148.                                                   MUNICIPIOS_BASE =:NuevoID;
  149.                                                   MUNICIPIOS_SEPOMEX =:MSestado;
  150.                                                   EXISTENTES_BASE =:CSColonia;
  151.                                                   EXISTENTES_SEPOMEX =: InsertaMunicipio;
  152.                                                END
  153.                                            END
  154.                                        END
  155.                                    END
  156.                                END
  157.                             END
  158.                        END
  159.                        END
  160.                    END
  161.                END
  162.              END
  163.              SUSPEND;
  164.            END
  165.          ELSE          
  166.            CONCATENADOS='realizar insercion de municipio';
  167.        END
  168.      ELSE
  169.        CONCATENADOS = 'Aqui se insertan los municipios';      
  170.        FOR
  171.        SELECT MAX(ID_MUNICIPIO)
  172.        FROM ZZ_SPM_MUNICIPIOS
  173.        WHERE ID_ESTADO = 1
  174.        /*WHERE ID_ESTADO =:ECantidad*/
  175.        INTO :MaximoID DO
  176.          BEGIN
  177.             MAXID =:MaximoID;
  178.             NuevoId =:MaximoID + 1;
  179.           END
  180.        FOR
  181.        SELECT DISTINCT UPPER(TS.D_MUNICIPIO), SM.NOMBRE, TS.C_ESTADO
  182.        FROM TEMPORAL_SEPOMEX TS
  183.        LEFT OUTER JOIN ZZ_SPM_MUNICIPIOS SM
  184.        ON TS.D_MUNICIPIO = SM.NOMBRE
  185.         WHERE TS.C_ESTADO = 1 AND SM.NOMBRE IS NULL
  186.         /*WHERE TS.C_ESTADO =:ECantidad AND SM.NOMBRE IS NULL*/
  187.         INTO :MSepomex, :MBase, :MSestado DO
  188.           BEGIN
  189.             IF(:MBase IS NULL) THEN
  190.               BEGIN
  191.                 INSERT INTO ZZ_SPM_MUNICIPIOS(
  192.                 ID_MUNICIPIO,ID_ESTADO,NOMBRE,
  193.                 RANGO1,RANGO2,RANGO3,RANGO4,RANGO5,RANGO6,RANGO7,RANGO8)
  194.                 VALUES(:NuevoId, :MSestado, :MSepomex,
  195.                 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);                
  196.                 FOR SELECT MAX(ID_CIUDAD)
  197.                 FROM ZZ_SPM_CIUDADES
  198.                 WHERE ID_ESTADO = :MSestado
  199.                 INTO :MaximoID DO
  200.                   BEGIN
  201.                     MAXID =:MaximoID;
  202.                     NuevoId =:MaximoID +1;
  203.                   END
  204.                     INSERT INTO ZZ_SPM_CIUDADES(
  205.                     ID_CIUDAD,ID_ESTADO,NOMBRE,
  206.                     RANGO1,RANGO2,RANGO3,RANGO4)
  207.                     VALUES(:NuevoId, :MSestado, :MSepomex,
  208.                     NULL,NULL,NULL,NULL);
  209.               END
  210.             ELSE
  211.              CONCATENADOS = 'No se encuentran municipios inexistentes';
  212.           END
  213.         SUSPEND;
  214.      END
  215. END

Última edición por gnzsoloyo; 12/03/2013 a las 18:18 Razón: SQL sin etiquetar.

Etiquetas: procedimiento, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:29.