Função para validar dígitos repetidos dentro de um número

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
klstos_95
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Sex, 03 Nov 2017 3:47 pm

Boa tarde pessoal,

Tenho que criar uma função que faça uma validação de dígitos repetidos dentro de um número, onde se houver 4 dígitos repetidos ou mais dentro desse número, a função retorne TRUE.
Ex:
Se eu receber o número 12345555678, a minha função deve retornar TRUE porque há o número cinco se repetindo 4 vezes. Isso deve valer pra qualquer posição em que o número repetido vai partir.

Alguém já teve que fazer algo parecido?
Obrigado!
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

bom dia klstos_95,

Faça um teste com esta função, se atender você adapta o retorno pra atender o que você precisa.
Eu testei no Oracle 11

Selecionar tudo

Create or replace
Function Fn_Conta_String(P_String In varchar2, P_Ocorrencia In Number) return varchar2 is
 Cursor c is
  select count(*) Qt_Ocor, b.string
  from ( select a.string 
         from  (select distinct level, substr( p_String,level,1 ) string
                from dual 
                connect by level < length(p_string) + 1 ) a ) b 
  group by b.string 
  order by b.string; 
 c_r c%rowtype;
 --
 v_retorno varchar2(2000);
Begin
 open c;
  loop
   fetch c into c_r;
    exit when c%notfound;
    --
    if c_r.qt_ocor >= p_ocorrencia then
       v_retorno := v_retorno||' string '||c_r.string||' '||to_char(c_r.qt_ocor)||'x';
    end if;
  end loop;
 close c;
 --
 if v_retorno is not null then
    return 'para '||p_string||' foi localizado '||v_retorno;
 else
    return null;
 end if; 
End; 
/

Selecionar tudo

select Fn_Conta_String('12345555678', 4) from dual;
Boa sorte!
Editado pela última vez por DanielNN em Ter, 07 Nov 2017 8:06 am, em um total de 1 vez.
Razão: Falta da tag [code]
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes