Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR ALTER PROCEDURE PRO_CORRIGE_TELEFONE (
- TABELA VARCHAR(30),
- CAMPO VARCHAR(30),
- CAMPO_KEY VARCHAR(30),
- DDD_PADRAO VARCHAR(2))
- AS
- DECLARE VARIABLE SQL VARCHAR(1000);
- DECLARE VARIABLE OLD_TEL VARCHAR(100);
- DECLARE VARIABLE NEW_TEL VARCHAR(100);
- DECLARE VARIABLE DDD VARCHAR(100);
- DECLARE VARIABLE PREFIXO VARCHAR(100);
- DECLARE VARIABLE NUMERO VARCHAR(100);
- DECLARE VARIABLE ID INTEGER;
- DECLARE VARIABLE PODE INTEGER;
- BEGIN
- SQL = 'SELECT '||:CAMPO||', '||:CAMPO_KEY||' FROM '||:TABELA;
- FOR EXECUTE STATEMENT(SQL) INTO :OLD_TEL, ID DO
- BEGIN
- DDD = '';
- PREFIXO = '';
- NUMERO = '';
- NEW_TEL = '';
- OLD_TEL = (SELECT RESULT FROM PRO_SOMENTE_NUMEROS(:OLD_TEL));
- --REMOVE ZEROS NO INICIO
- IF (SUBSTRING(OLD_TEL FROM 1 FOR 1) = '0') THEN
- OLD_TEL = TRIM(SUBSTRING(OLD_TEL FROM 2 FOR CHAR_LENGTH(OLD_TEL)));
- --REMOVE CODIGO DO PAIS
- IF (SUBSTRING(OLD_TEL FROM 1 FOR 2) = '55') THEN
- OLD_TEL = TRIM(SUBSTRING(OLD_TEL FROM 3 FOR CHAR_LENGTH(OLD_TEL)));
- --REMOVE ZEROS DESNECESSARIOS DO DDD
- IF (SUBSTRING(OLD_TEL FROM 1 FOR 1) = '0') THEN
- OLD_TEL = TRIM(SUBSTRING(OLD_TEL FROM 2 FOR CHAR_LENGTH(OLD_TEL)));
- --VERIFICA SE E UM NUMERO DE TELEFONE VALIDO. SE NAO, ANULA O CAMPO
- IF ((OLD_TEL <> '') AND (CHAR_LENGTH(OLD_TEL) > 7) AND (OLD_TEL IS NOT NULL)) THEN
- BEGIN
- --VERIFICA SE JA ESTA COM O NONO DIGITO
- IF (CHAR_LENGTH(OLD_TEL) = 11) THEN
- BEGIN
- NUMERO = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-3 FOR 4);
- OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-4);
- PREFIXO = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-4 FOR 5);
- OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-5);
- DDD = '('||OLD_TEL||')';
- --PADRONIZA O CAMPO NO FORMATO: (DD) PPPPP-NNNN
- NEW_TEL = DDD||' '||PREFIXO||'-'||NUMERO;
- SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = '''||NEW_TEL||''' WHERE '||:CAMPO_KEY|| ' = '||:ID;
- EXECUTE STATEMENT(SQL);
- END
- ELSE
- BEGIN
- NUMERO = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-3 FOR 4);
- OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-4);
- PREFIXO = SUBSTRING(OLD_TEL FROM CHAR_LENGTH(OLD_TEL)-3 FOR 4);
- OLD_TEL = SUBSTRING(OLD_TEL FROM 1 FOR CHAR_LENGTH(OLD_TEL)-4);
- --SE NAO ACHAR O DDD, SETA O PADRAO
- IF (OLD_TEL = '') THEN
- BEGIN
- IF (DDD_PADRAO IN ('11', '12', '13', '14', '15', '16', '17', '18', '19', '21', '22', '24', '27', '28')) THEN
- PODE = 1;
- ELSE
- PODE = 0;
- DDD = '('||:DDD_PADRAO||')';
- END
- ELSE
- BEGIN
- --VERIFICA SE O NUMERO ESTA EM UMA AREA QUE FOI AFETADA PELO NONO DIGITO. OBS: ADICIONAR NOVOS DDDS
- -- QUANDO NECESSARIO.
- IF (OLD_TEL IN ('11', '12', '13', '14', '15', '16', '17', '18', '19', '21', '22', '24', '27', '28')) THEN
- PODE = 1;
- ELSE
- PODE = 0;
- DDD = '('||OLD_TEL||')';
- END
- --VERIFICA SE TODAS AS VARIAVEIS SAO VALIDAS. SE NAO, ANULA O CAMPO.
- IF ((CHAR_LENGTH(DDD) = 4) AND (CHAR_LENGTH(PREFIXO) = 4) AND (CHAR_LENGTH(NUMERO) = 4)) THEN
- BEGIN
- --VERIFICA SE O NUMERO E MESMO UM CELULAR. SE NAO, SO PADRONIZA.
- IF (SUBSTRING(PREFIXO FROM 1 FOR 1) IN ('8', '9')) THEN
- BEGIN
- IF (PODE = 1) THEN
- NEW_TEL = DDD||' 9'||PREFIXO||'-'||NUMERO;
- ELSE
- NEW_TEL = DDD||' '||PREFIXO||'-'||NUMERO;
- SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = '''||NEW_TEL||''' WHERE '||:CAMPO_KEY|| ' = '||:ID;
- EXECUTE STATEMENT(SQL);
- END
- ELSE
- BEGIN
- NEW_TEL = DDD||' '||PREFIXO||'-'||NUMERO;
- SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = '''||NEW_TEL||''' WHERE '||:CAMPO_KEY|| ' = '||:ID;
- EXECUTE STATEMENT(SQL);
- END
- END
- ELSE
- BEGIN
- SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = NULL WHERE '||:CAMPO_KEY|| ' = '||:ID;
- EXECUTE STATEMENT(SQL);
- END
- END
- END
- ELSE
- BEGIN
- SQL = 'UPDATE '||:TABELA||' SET '||:CAMPO||' = NULL WHERE '||:CAMPO_KEY|| ' = '||:ID;
- EXECUTE STATEMENT(SQL);
- END
- END
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement