Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #97616
    eduardoamf
    Participante

      Criei um função para separar n registros separados por espaços, passado por um parametro..

      com 2 registros funciona numa boa. Exemplo:

      fulano siclano

      ele consegue me retornar separadamente

      “fulano”
      “siclano”

      agora quando tento com mais de 2 registro ele começa a me retornar errado..

      exemplo:

      “fulano siclano deltrano”

      ele me retorna:

      “fulano”
      “siclano deltrano”

      não sei se é minha lógica o problema ou se deve ser alguma limitação das funçoes que utilizei…

      outro problema é que qnd digito todos os registros preciso digitar um espaço no final se não dá erro..

      se alguem souber outra forma de resolver isso…

      sgue o código da função a baixo…

      CREATE OR REPLACE FUNCTION SC_FNC_TROCA_SENHA(p_NOME_USER in VARCHAR2)
      return varchar2 IS

      v_coleta_user varchar2(300);
      v_recebe_user VARCHAR(100);
      v_ctl_in NUMBER := 1;
      v_ctl_sub NUMBER := null;

      CURSOR C_COLETA IS
      select LOCKEDREASONID,
      PASSWORD,
      ISLOCKEDOUT,
      CREATIONDATE,
      from sec_membershipusers
      where username = 'WSTSCC';

      BEGIN

      BEGIN

      for r1 in C_COLETA loop

      LOOP
      v_ctl_sub := INSTR(p_NOME_USER, ' ', v_ctl_in);
      EXIT WHEN v_ctl_sub = 0;
      v_ctl_sub := v_ctl_sub - 1;
      v_recebe_user := SUBSTR(p_NOME_USER, v_ctl_in, v_ctl_sub);

      dbms_output.put_line(v_recebe_user);

      v_ctl_in := v_ctl_sub + v_ctl_in + 1;

      ----VERIFICA SE USUÁRIO EXISTE
      BEGIN
      select password
      into v_coleta_user
      from sec_membershipusers
      where username = v_recebe_user;

      EXCEPTION
      WHEN NO_DATA_FOUND THEN
      return 'ERRO - O Usuário ' || v_recebe_user || ' não existe na base';
      END;
      -------

      UPDATE sec_membershipusers
      SET PASSWORD = r1.PASSWORD,
      LOCKEDREASONID = r1.LOCKEDREASONID,
      ISLOCKEDOUT = r1.ISLOCKEDOUT,
      CREATIONDATE = r1.CREATIONDATE,

      WHERE USERNAME = v_recebe_user;
      END LOOP;
      end loop;

      EXCEPTION
      WHEN OTHERS THEN
      RETURN '1 - ERRO AO TENTAR TROCAR SENHA' || SQLERRM;

      END;

      RETURN 'SENHA MODIFICADA';

      END SC_FNC_TROCA_SENHA;

      obrigado…

      #97620
      charlles_jr
      Participante

        Eduardo,

        Veja se este script te ajuda a entender melhor o que vc está querendo.

        Veja também se seu script poderia ficar de uma forma melhor…

        Qualquer Dúvida estou a disposição.

        Grande Abraço

        DECLARE
        v_string VARCHAR2(255) := ‘Oracle Applications Server EBS’;

        v_item CHAR(1) := ‘ ‘;

        v_idx_instr PLS_INTEGER := 0;
        v_idx_instr_old PLS_INTEGER := 0;

        v_idx_ocorr PLS_INTEGER := 1;

        v_valor VARCHAR2(255) := NULL;

        BEGIN

        LOOP

        v_idx_instr := INSTR(v_string, v_item, 1 , v_idx_ocorr);

        EXIT WHEN v_idx_instr = 0;

        v_valor := SUBSTR(v_string, v_idx_instr_old + 1, v_idx_instr – v_idx_instr_old );

        DBMS_OUTPUT.Put_Line( v_valor );

        v_idx_instr_old := v_idx_instr;

        v_idx_ocorr := v_idx_ocorr + 1;

        END LOOP;

        DBMS_OUTPUT.Put_Line( SUBSTR(v_string, v_idx_instr_old + 1, LENGTH(v_string) ));

        END;

        #97631
        eduardoamf
        Participante

          Charlles, entendi bem a sua lógica, vou adaptar ao meu código.. acho que vai funcionar bem..

          daqui a pouco eu volto e comento se funcionou tudo certo!!

          muito obrigado pela atenção!!

          #97638
          eduardoamf
          Participante

            Dei uma ‘mesclada’ no meu código com a sua logica e a minha,
            funcionou..

            Mas ainda tenho uma dificuldade..

            qnd digito o parametro tenho que colocar uma virgula no final no final (substitui o v_item CHAR(1) := ‘ ‘ por :=’,’ para ficar melhor de visualizar)

            Ex: EMERKUHL,ANASUMM,SONIDIRE,FATIESLI,

            se eu não digitar essa virgula, ele até reconhece o usuário ‘FATIELSI’ mas não troca a senha dele..

            já tentei trocar o exit de posição mas não adiantou…

            se puder me ajudar nessa..

            Agradeço!!!

            #97649
            Ishii
            Participante

              Olá,

              Dê uma olhada no site do Mestre Tom http://bit.ly/f7My2b e veja uma exemplo muito legal de como fazer isso…(ou tudo na verdade!)

              []s Ishii

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