cesar_ruano2024

Untitled

Nov 28th, 2024
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 9.32 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------
  2. ----------------------GENERAR CONSECUTIVOS AL SEr DESAGREGADOS VARIAS VECES----------------
  3. -------------------------------------------------------------------------------------------
  4. PROCEDURE PR_TABLE_TEMP_CONSE_HIST(
  5.                                     P_tipoTransfer        VARCHAR2,
  6.                                     ErrorCode             OUT NUMBER,
  7.                                     ErrorDescription      OUT VARCHAR2)
  8. IS  
  9.     v_rows              NUMBER;
  10.     v_id_Padre          NUMBER;  
  11.     v_RowIdPadre        NUMBER := 0;
  12.     v_RowNumber         NUMBER := 1;
  13.     v_countRepeat       NUMBER := 0;    
  14.     v_validarConse      NUMBER := 0;    
  15.     v_conse_1           VARCHAR(30);  
  16.     v_conse_valida      VARCHAR(30) := NULL;
  17. BEGIN
  18.       EXECUTE IMMEDIATE 'TRUNCATE TABLE temp_Consecutivo';
  19.  
  20.       SELECT COUNT(IDPADRE)
  21.         INTO v_RowIdPadre
  22.         FROM (  
  23.                   SELECT TRF.TRF_IDPADRE AS IDPADRE
  24.                     FROM SIMIT.TRF_TRANSFERENCIAS TRF
  25.                    WHERE TRF.TRF_IDPADRE IS NOT NULL
  26.                      AND TRF.TRF_IDTIPOTRANSFER  = P_tipoTransfer
  27.                      AND TRF.TRF_ESTADOTRANSFERH = 'A'
  28.                 GROUP BY TRF.TRF_IDPADRE
  29.              );
  30.  
  31.       WHILE v_RowIdPadre > 0
  32.       LOOP
  33.              INSERT INTO temp_Consecutivo ( temp_consecutivo,
  34.                                             temp_id_transferencia,
  35.                                             Temp_Id_Padre)
  36.                   SELECT TRFC.TRF_CONSECUTIVO || '_' || ROW_NUMBER() OVER (ORDER BY TRFC.TRF_ID_TRANSFERENCIA ASC),
  37.                          TRFC.TRF_ID_TRANSFERENCIA,
  38.                          TRFC.TRF_IDPADRE
  39.                     FROM TRF_TRANSFERENCIAS TRFC
  40.                    WHERE TRFC.TRF_IDPADRE         = ( SELECT IDPADRE
  41.                                                         FROM (
  42.                                                                 SELECT TRF.TRF_IDPADRE                                   AS IDPADRE,
  43.                                                                        ROW_NUMBER() OVER (ORDER BY TRF.TRF_IDPADRE ASC)  AS RANGO
  44.                                                                   FROM TRF_TRANSFERENCIAS TRF
  45.                                                                  WHERE TRF.TRF_IDPADRE IS NOT NULL
  46.                                                                    AND TRF.TRF_IDTIPOTRANSFER   = P_tipoTransfer
  47.                                                                    AND TRF.TRF_ESTADOTRANSFERH  = 'A'
  48.                                                               GROUP BY TRF.TRF_IDPADRE
  49.                                                              )
  50.                                                        WHERE RANGO = v_RowNumber
  51.                                                     )
  52.                      AND TRFC.TRF_IDTIPOTRANSFER  = P_tipoTransfer
  53.                      AND TRFC.TRF_ESTADOTRANSFERH = 'A';
  54.            v_rows := SQL%ROWCOUNT;            
  55.  
  56.            v_RowIdPadre := v_RowIdPadre - 1;
  57.            v_RowNumber := v_RowNumber + 1;
  58.            IF (v_rows > 0) THEN
  59.              COMMIT;
  60.              ErrorCode       := 0;
  61.              ErrorDescription:= 'SIN ERRORES';
  62.            ELSE
  63.              ROLLBACK;
  64.              ErrorCode       := -1;
  65.              ErrorDescription:= 'ERROR AL INSERTAR REGISTRO TEMPORAL CONSECUTIVO';
  66.            END IF;
  67.       END LOOP;
  68.  
  69.       SELECT COUNT(REPETIDO)
  70.         INTO v_countRepeat
  71.         FROM (  SELECT TEMP.temp_Consecutivo AS REPETIDO
  72.                   FROM temp_Consecutivo TEMP
  73.                  WHERE CASE WHEN SUBSTR(TEMP.TEMP_CONSECUTIVO,LENGTH(TEMP.TEMP_CONSECUTIVO)-1) != '_1' THEN SUBSTR(TEMP.TEMP_CONSECUTIVO,LENGTH(TEMP.TEMP_CONSECUTIVO)-2)
  74.                        ELSE SUBSTR(TEMP.TEMP_CONSECUTIVO,LENGTH(TEMP.TEMP_CONSECUTIVO)-1) END = '_1'
  75.               GROUP BY TEMP.temp_Consecutivo
  76.                 HAVING COUNT(TEMP.temp_Consecutivo) > 1
  77.              );
  78.  
  79.       WHILE (v_countRepeat > 0)
  80.         LOOP                
  81.  
  82.                 SELECT CONSECUTIVO INTO v_conse_valida
  83.                 FROM (  SELECT TEMP.temp_Consecutivo AS CONSECUTIVO,ROW_NUMBER() OVER (ORDER BY TEMP.temp_Consecutivo ASC) AS RANGO
  84.                         FROM temp_Consecutivo TEMP                                              
  85.                         GROUP BY TEMP.temp_Consecutivo
  86.                         HAVING COUNT(TEMP.temp_Consecutivo) > 1
  87.                         ORDER BY TEMP.temp_Consecutivo ASC                                              
  88.                       )
  89.                 WHERE ROWNUM = 1;
  90.  
  91.                 SELECT temp_Consecutivo,
  92.                        TEMP_ID_PADRE
  93.                   INTO v_conse_1,v_id_Padre
  94.                   FROM ( SELECT TP.temp_Consecutivo,
  95.                                 TP.TEMP_ID_PADRE,ROW_NUMBER() OVER (ORDER BY TP.TEMP_ID_PADRE ASC) AS RANGO
  96.                            FROM temp_Consecutivo TP
  97.                           WHERE TP.temp_Consecutivo = (  SELECT CONSECUTIVO
  98.                                                            FROM (  SELECT TEMP.temp_Consecutivo                                  AS CONSECUTIVO,
  99.                                                                           ROW_NUMBER() OVER (ORDER BY TEMP.temp_Consecutivo ASC) AS RANGO
  100.                                                                      FROM temp_Consecutivo TEMP                                              
  101.                                                                  GROUP BY TEMP.temp_Consecutivo
  102.                                                                    HAVING COUNT(TEMP.temp_Consecutivo) > 1
  103.                                                                  ORDER BY TEMP.temp_Consecutivo ASC                                              
  104.                                                                  )
  105.                                                            WHERE ROWNUM = 1
  106.                                                        )
  107.                         )                            
  108.                  WHERE RANGO = 2
  109.               ORDER BY TEMP_ID_PADRE ASC;
  110.  
  111.                 SELECT T.temp_Consecutivo
  112.                   INTO v_conse_1
  113.                   FROM temp_Consecutivo T
  114.                  WHERE T.TEMP_ID_TRANSFERENCIA = v_id_Padre;
  115.  
  116.                 MERGE INTO SIMIT.temp_Consecutivo UTP1
  117.                 USING (
  118.                          SELECT v_conse_1 || '_' || ROW_NUMBER() OVER (ORDER BY TRFC.TRF_ID_TRANSFERENCIA ASC) AS ConsecutivoFinal,
  119.                                 TRFC.TRF_ID_TRANSFERENCIA
  120.                            FROM SIMIT.TRF_TRANSFERENCIAS TRFC
  121.                           WHERE TRFC.TRF_IDPADRE            = (  SELECT IDPADRE
  122.                                                                    FROM (
  123.                                                                             SELECT TRF.TRF_IDPADRE                                  AS IDPADRE,
  124.                                                                                    ROW_NUMBER() OVER (ORDER BY TRF.TRF_IDPADRE ASC) AS RANGO
  125.                                                                              FROM SIMIT.TRF_TRANSFERENCIAS TRF                                                          
  126.                                                                             WHERE TRF.TRF_IDPADRE          = v_id_Padre
  127.                                                                               AND TRF.TRF_IDTIPOTRANSFER   = P_tipoTransfer
  128.                                                                               AND TRF.TRF_ESTADOTRANSFERH  = 'A'
  129.                                                                          )
  130.                                                                    WHERE RANGO = 1
  131.                                                                )
  132.                             AND TRFC.TRF_IDTIPOTRANSFER     = P_tipoTransfer
  133.                             AND TRFC.TRF_ESTADOTRANSFERH    = 'A'
  134.                        )UTP2
  135.                 ON(UTP1.TEMP_ID_TRANSFERENCIA = UTP2.TRF_ID_TRANSFERENCIA)
  136.                 WHEN MATCHED THEN UPDATE SET
  137.                   UTP1.temp_Consecutivo = UTP2.ConsecutivoFinal;
  138.  
  139.                 v_rows := SQL%ROWCOUNT;
  140.  
  141.                 IF (v_rows > 0) THEN
  142.                    COMMIT;
  143.                    ErrorCode        := 0;
  144.                    ErrorDescription := 'SIN ERRORES';
  145.                 ELSE
  146.                    ROLLBACK;
  147.                    ErrorCode        := -1;
  148.                    ErrorDescription := 'ERROR AL ACTUALIZAR CONSECUTIVO';
  149.                 END IF;
  150.  
  151.                 SELECT COUNT(REPETIDO)
  152.                   INTO v_validarConse
  153.                   FROM ( SELECT TEMP.temp_Consecutivo AS REPETIDO
  154.                            FROM temp_Consecutivo TEMP
  155.                           WHERE TEMP.temp_Consecutivo = v_conse_valida
  156.                        GROUP BY TEMP.temp_Consecutivo
  157.                          HAVING COUNT(TEMP.temp_Consecutivo) > 1
  158.                        );
  159.  
  160.                 IF (v_validarConse = 0)THEN
  161.                    v_countRepeat := v_countRepeat - 1;
  162.                 END IF;
  163.  
  164.         END LOOP;
  165.  
  166.         IF(v_RowIdPadre = 0) THEN
  167.             ErrorCode        := 0;
  168.             ErrorDescription := 'SIN ERRORES';
  169.         END IF;
  170.  
  171.         COMMIT;        
  172. END PR_TABLE_TEMP_CONSE_HIST;
Advertisement
Add Comment
Please, Sign In to add comment