Advertisement
SoWesley

Acertar Telefones

Oct 31st, 2013
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.42 KB | None | 0 0
  1. CREATE OR ALTER PROCEDURE PRO_CORRIGE_TELEFONE (
  2.     TABELA VARCHAR(30),
  3.     CAMPO VARCHAR(30),
  4.     CAMPO_KEY VARCHAR(30),
  5.     DDD_PADRAO VARCHAR(2))
  6. AS
  7. DECLARE VARIABLE SQL VARCHAR(1000);
  8. DECLARE VARIABLE OLD_TEL VARCHAR(100);
  9. DECLARE VARIABLE NEW_TEL VARCHAR(100);
  10. DECLARE VARIABLE DDD VARCHAR(100);
  11. DECLARE VARIABLE PREFIXO VARCHAR(100);
  12. DECLARE VARIABLE NUMERO VARCHAR(100);
  13. DECLARE VARIABLE ID INTEGER;
  14. DECLARE VARIABLE PODE INTEGER;
  15. BEGIN
  16.   SQL =  'SELECT '||:CAMPO||', '||:CAMPO_KEY||' FROM '||:TABELA;
  17.  
  18.   FOR EXECUTE STATEMENT(SQL) INTO :OLD_TEL, ID DO
  19.   BEGIN
  20.     DDD     = '';
  21.     PREFIXO = '';
  22.     NUMERO  = '';
  23.     NEW_TEL = '';
  24.  
  25.     OLD_TEL = (SELECT RESULT FROM PRO_SOMENTE_NUMEROS(:OLD_TEL));
  26.  
  27.     --REMOVE ZEROS NO INICIO
  28.     IF (SUBSTRING(OLD_TEL FROM 1 FOR 1) = '0') THEN
  29.       OLD_TEL = TRIM(SUBSTRING(OLD_TEL FROM 2 FOR CHAR_LENGTH(OLD_TEL)));
  30.  
  31.     --REMOVE CODIGO DO PAIS
  32.     IF (SUBSTRING(OLD_TEL FROM 1 FOR 2) = '55') THEN
  33.       OLD_TEL = TRIM(SUBSTRING(OLD_TEL FROM 3 FOR CHAR_LENGTH(OLD_TEL)));
  34.  
  35.     --REMOVE ZEROS DESNECESSARIOS DO DDD
  36.     IF (SUBSTRING(OLD_TEL FROM 1 FOR 1) = '0') THEN
  37.       OLD_TEL = TRIM(SUBSTRING(OLD_TEL FROM 2 FOR CHAR_LENGTH(OLD_TEL)));
  38.  
  39.     --VERIFICA SE E UM NUMERO DE TELEFONE VALIDO. SE NAO, ANULA O CAMPO
  40.     IF ((OLD_TEL <> '') AND (CHAR_LENGTH(OLD_TEL) > 7) AND (OLD_TEL IS NOT NULL)) THEN
  41.     BEGIN
  42.       --VERIFICA SE JA ESTA COM O NONO DIGITO
  43.       IF (CHAR_LENGTH(OLD_TEL) = 11) THEN
  44.       BEGIN
  45.         NUMERO  = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-3 FOR 4);
  46.         OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-4);
  47.  
  48.         PREFIXO = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-4 FOR 5);
  49.         OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-5);
  50.  
  51.         DDD = '('||OLD_TEL||')';
  52.  
  53.         --PADRONIZA O CAMPO NO FORMATO: (DD) PPPPP-NNNN
  54.         NEW_TEL = DDD||' '||PREFIXO||'-'||NUMERO;
  55.        
  56.         SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = '''||NEW_TEL||''' WHERE '||:CAMPO_KEY|| ' = '||:ID;
  57.        
  58.         EXECUTE STATEMENT(SQL);
  59.       END
  60.       ELSE
  61.       BEGIN
  62.         NUMERO  = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-3 FOR 4);
  63.         OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-4);
  64.  
  65.         PREFIXO = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-3 FOR 4);
  66.         OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-4);
  67.  
  68.         --SE NAO ACHAR O DDD, SETA O PADRAO
  69.         IF (OLD_TEL = '') THEN
  70.         BEGIN
  71.           IF (DDD_PADRAO IN ('11', '12', '13', '14', '15', '16', '17', '18', '19', '21', '22', '24', '27', '28')) THEN
  72.             PODE = 1;
  73.           ELSE
  74.             PODE = 0;
  75.  
  76.           DDD = '('||:DDD_PADRAO||')';
  77.         END
  78.         ELSE
  79.         BEGIN
  80.           --VERIFICA SE O NUMERO ESTA EM UMA AREA QUE FOI AFETADA PELO NONO DIGITO. OBS: ADICIONAR NOVOS DDDS
  81.           -- QUANDO NECESSARIO.
  82.           IF (OLD_TEL IN ('11', '12', '13', '14', '15', '16', '17', '18', '19', '21', '22', '24', '27', '28')) THEN
  83.             PODE = 1;
  84.           ELSE
  85.             PODE = 0;
  86.  
  87.           DDD = '('||OLD_TEL||')';
  88.         END
  89.  
  90.         --VERIFICA SE TODAS AS VARIAVEIS SAO VALIDAS. SE NAO, ANULA O CAMPO.
  91.         IF ((CHAR_LENGTH(DDD) = 4) AND (CHAR_LENGTH(PREFIXO) = 4) AND (CHAR_LENGTH(NUMERO) = 4)) THEN
  92.         BEGIN
  93.           --VERIFICA SE O NUMERO E MESMO UM CELULAR. SE NAO, SO PADRONIZA.
  94.           IF (SUBSTRING(PREFIXO FROM 1 FOR 1) IN ('8', '9')) THEN
  95.           BEGIN
  96.             IF (PODE = 1) THEN
  97.               NEW_TEL = DDD||' 9'||PREFIXO||'-'||NUMERO;
  98.             ELSE
  99.               NEW_TEL = DDD||' '||PREFIXO||'-'||NUMERO;
  100.  
  101.             SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = '''||NEW_TEL||''' WHERE '||:CAMPO_KEY|| ' = '||:ID;
  102.        
  103.             EXECUTE STATEMENT(SQL);
  104.           END
  105.           ELSE
  106.           BEGIN
  107.             NEW_TEL = DDD||' '||PREFIXO||'-'||NUMERO;
  108.        
  109.             SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = '''||NEW_TEL||''' WHERE '||:CAMPO_KEY|| ' = '||:ID;
  110.        
  111.             EXECUTE STATEMENT(SQL);
  112.           END
  113.         END
  114.         ELSE
  115.         BEGIN
  116.           SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = NULL WHERE '||:CAMPO_KEY|| ' = '||:ID;
  117.        
  118.           EXECUTE STATEMENT(SQL);
  119.         END
  120.       END
  121.     END
  122.     ELSE
  123.     BEGIN
  124.       SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = NULL WHERE '||:CAMPO_KEY|| ' = '||:ID;
  125.  
  126.       EXECUTE STATEMENT(SQL);
  127.     END
  128.   END
  129. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement