- Este tópico contém 4 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 2 meses atrás por
Ishii.
-
AutorPosts
-
10 de janeiro de 2011 às 10:47 pm #97616
eduardoamf
ParticipanteCriei 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 ISv_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…
11 de janeiro de 2011 às 2:55 am #97620charlles_jr
ParticipanteEduardo,
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;
11 de janeiro de 2011 às 5:59 pm #97631eduardoamf
ParticipanteCharlles, 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!!
11 de janeiro de 2011 às 9:46 pm #97638eduardoamf
ParticipanteDei 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!!!
12 de janeiro de 2011 às 4:21 am #97649Ishii
ParticipanteOlá,
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
-
AutorPosts
- Você deve fazer login para responder a este tópico.