› Fóruns › SQL e PL/SQL › Comando Select › Comando Select
Essa 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 caracteres
End;