Pular para o conteúdo
  • Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 18 anos, 1 mês atrás por Fontalva.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #75422
    adrianonobre
    Participante

      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!

      #77778
      Anônimo

        Fala 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;
        BEGIN

        SELECT 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.

        #77951
        Anônimo

          Fala 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;
          BEGIN

          SELECT 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.

          #77894
          Fontalva
          Participante

            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;

            #78068
            Fontalva
            Participante

              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;

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.
            plugins premium WordPress