- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 18 anos, 1 mês atrás por Fontalva.
-
AutorPosts
-
13 de março de 2006 às 5:54 am #75422adrianonobreParticipante
Boa Noite
Estou começando a estudar oracle, sou iniciante e preciso de uma ajuda gostaria de saber como faço pra fazer um sistema de login que na hora q eu digite a senha ele aceite somente 6 caracteres, sendo 4 strings e 2 numericos. O Instrutor que passou o desafio no meu curso disse q temos q usar a tabela dual, ele comentou que tem q ser feito com um SELECT e comentou outros comandos pra fazer: WHERE, LENGHT, SUBSTR, REPLACE e TRANSLATE. Quem puder me orientar em alguma coisa… eu agradeço a ajuda!
Desde Já
Obrigado Pela Atenção!26 de dezembro de 2006 às 8:34 pm #77778AnônimoFala brother, blz?
Então cara, quanto à parte da string, vai abaixo uma dica…
Quanto à parte numérica… com este exemplo você pode montar…
Talvez não seja a melhor forma de se fazer, mas, fica como dica….DECLARE
v_string VARCHAR2(10) := 'TRE12SOLL9';
v_string_analisada VARCHAR2(30);
v_tam NUMBER(03) := 0;
v_conta NUMBER(03) := 0;
BEGINSELECT TRANSLATE(v_string, '1234567890', '----------')
INTO v_string_analisada
FROM dual;v_tam := LENGTH(v_string_analisada);
FOR x IN 1..v_tam
LOOP
if SUBSTR(v_string_analisada,x,1) = '-'
THEN
v_conta := v_conta + 1;
END IF;
END LOOP;IF v_conta = 0
THEN
dbms_output.put_line('Ok. Só digitou letras.');
ELSE
dbms_output.put_line('Login inválido, encontrado(s) '||v_conta||' número(s). ');
END IF;END;
Abraços,
Trevisolli.
26 de dezembro de 2006 às 8:34 pm #77951AnônimoFala brother, blz?
Então cara, quanto à parte da string, vai abaixo uma dica…
Quanto à parte numérica… com este exemplo você pode montar…
Talvez não seja a melhor forma de se fazer, mas, fica como dica….DECLARE
v_string VARCHAR2(10) := 'TRE12SOLL9';
v_string_analisada VARCHAR2(30);
v_tam NUMBER(03) := 0;
v_conta NUMBER(03) := 0;
BEGINSELECT TRANSLATE(v_string, '1234567890', '----------')
INTO v_string_analisada
FROM dual;v_tam := LENGTH(v_string_analisada);
FOR x IN 1..v_tam
LOOP
if SUBSTR(v_string_analisada,x,1) = '-'
THEN
v_conta := v_conta + 1;
END IF;
END LOOP;IF v_conta = 0
THEN
dbms_output.put_line('Ok. Só digitou letras.');
ELSE
dbms_output.put_line('Login inválido, encontrado(s) '||v_conta||' número(s). ');
END IF;END;
Abraços,
Trevisolli.
2 de janeiro de 2007 às 7:48 pm #77894FontalvaParticipanteEssa funçãozinha ai usa quase tudo o que voce precisa, só não sei como voce poderia empregar o REPLACE, mas o resto faz tudo.
Create Or Replace Function incriptaValidaSenha(p_senha In Varchar2) Return Varchar2 Is
V_SENHA Varchar2(6);V_CHARS Varchar2(4);
V_NUMS Number(2):= 0;
V_CONT_2Nums Boolean;
v_tot_num Number(1) := 0;
v_tot_char Number(1) := 0;
v_incript Varchar2(6);Begin
V_SENHA := Trim(P_SENHA);For X In 1..LENGTH(V_SENHA) Loop
If substr(v_senha, x, 1) In ('1','2','3','4','5','6','7','8','9','0') Then
v_tot_num := v_tot_num + 1;
Else
v_tot_char := v_tot_char + 1;
End If;
End Loop;If v_tot_num = 2 And v_tot_char = 4 Then
Select translate(upper(v_senha),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','-,º_+!@#$%¨*()£ÿÖØø¤Ü¿Ô') Into v_incript From dual;
v_incript := translate(v_incript,'0123456789','abcdefghi');
End If;Return v_incript;
Exception When Others Then
DBMS_OUTPUT.PUT_LINE('Numero de caracteres excede os 6 digitos'||Sqlcode);--> Caso tenha sido digitado mais de 6 caracteresEnd;
2 de janeiro de 2007 às 7:48 pm #78068FontalvaParticipanteEssa funçãozinha ai usa quase tudo o que voce precisa, só não sei como voce poderia empregar o REPLACE, mas o resto faz tudo.
Create Or Replace Function incriptaValidaSenha(p_senha In Varchar2) Return Varchar2 Is
V_SENHA Varchar2(6);V_CHARS Varchar2(4);
V_NUMS Number(2):= 0;
V_CONT_2Nums Boolean;
v_tot_num Number(1) := 0;
v_tot_char Number(1) := 0;
v_incript Varchar2(6);Begin
V_SENHA := Trim(P_SENHA);For X In 1..LENGTH(V_SENHA) Loop
If substr(v_senha, x, 1) In ('1','2','3','4','5','6','7','8','9','0') Then
v_tot_num := v_tot_num + 1;
Else
v_tot_char := v_tot_char + 1;
End If;
End Loop;If v_tot_num = 2 And v_tot_char = 4 Then
Select translate(upper(v_senha),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','-,º_+!@#$%¨*()£ÿÖØø¤Ü¿Ô') Into v_incript From dual;
v_incript := translate(v_incript,'0123456789','abcdefghi');
End If;Return v_incript;
Exception When Others Then
DBMS_OUTPUT.PUT_LINE('Numero de caracteres excede os 6 digitos'||Sqlcode);--> Caso tenha sido digitado mais de 6 caracteresEnd;
-
AutorPosts
- Você deve fazer login para responder a este tópico.