BEGIN
select password,
into v_coleta_user
from sec_membershipusers
where username = 'WSTSCC';
EXCEPTION
WHEN OTHERS THEN
RETURN '1 - ERRO AO TENTAR TROCAR SENHA' || SQLERRM;
END;
BEGIN
UPDATE sec_membershipusers
SET password = v_coleta_user
where username = p_NOME_USER;
EXCEPTION
WHEN OTHERS THEN
RETURN 'ERRO - Erro na troca' || SQLERRM;
END;
o esquema é o mesmo preciso pegar os campos do usuário 'WSTSCC' e fazer um update no mesmos campos do usuário que entra no parametro p_NOME_USER... só que agora não só com o campo password mas tembém com os campos ISLOCKEDOUT, CREATIONDATE, LASTLOGINDATE ... você poderiam dar uma ajuda???
Eu acabei de respodner teu outro topico...não sei se acertei...mas pelo o que entendi...da pra fazer de varias maneiras...eu já tinha uma mais ou menos montada...então segui esta linha...
veja se isso te resolve...utilizei um cursor, mas como é apenas os dados de um registro, poderia ser com um select into..mas...vamos ver o que da..
dando errado ou certo, da um retorno..ok?!
CREATE OR REPLACE FUNCTION SC_FNC_TROCA_SENHA(p_NAME_USER in VARCHAR2)
return varchar2 IS
cursor c_user is
select PASSWORD,ISLOCKEDOUT, CREATIONDATE, LASTLOGINDATE
from sec_membershipusers
where username = 'WSTSCC';
BEGIN
For rs in C_USER Loop
UPDATE sec_membershipusers
SET PASSWORD = rs.password,
ISLOCKEDOUT = rs.ISLOCKEDOUT
CREATIONDATE = rs.CREATIONDATE
LASTLOGINDATE = rs.LASTLOGINDATE
WHERE USERNAME = p_NAME_USER;
IF SQL%ROWCOUNT = 0 THEN
RETURN 'NENHUMA LINHA ALTERADA';
ELSE
COMMIT;
RETURN 'SENHA ALTERADA COM SUCESSO!';
END IF;
END SC_FNC_TROCA_SENHA;
BEGIN
FOR r1 IN (SELECT *
FROM sec_membershipusers
WHERE username = 'WSTSCC')
LOOP
UPDATE sec_membershipusers
SET password = r1.password
WHERE username = r1.username;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
RETURN 'ERRO - Erro na troca' || SQLERRM;
END;
malz aí...eskeci de colocar um tratamento caso de alguma merdinha...
tipo, não posso compilar aqui pra rodar com tranquilodade porque naõ tenho grant pra criar tabelas...saca?
adicionei o tratamento para qualquer outra exceção...
CREATE OR REPLACE FUNCTION SC_FNC_TROCA_SENHA(p_NAME_USER in VARCHAR2)
return varchar2 IS
cursor c_user is
select PASSWORD,ISLOCKEDOUT, CREATIONDATE, LASTLOGINDATE
from sec_membershipusers
where username = 'WSTSCC';
BEGIN
For rs in C_USER Loop
UPDATE sec_membershipusers
SET PASSWORD = rs.password,
ISLOCKEDOUT = rs.ISLOCKEDOUT
CREATIONDATE = rs.CREATIONDATE
LASTLOGINDATE = rs.LASTLOGINDATE
WHERE USERNAME = p_NAME_USER;
IF SQL%ROWCOUNT = 0 THEN
RETURN 'NENHUMA LINHA ALTERADA';
ELSE
COMMIT;
RETURN 'SENHA ALTERADA COM SUCESSO!';
END IF;
Exception
When other then
return 'Erro: '||sqlerrm;
END SC_FNC_TROCA_SENHA;
CREATE OR REPLACE FUNCTION SC_FNC_TROCA_SENHA(p_NOME_USER in VARCHAR2)
return varchar2 IS
v_coleta_user varchar2(300);
BEGIN
BEGIN
select password
into v_coleta_user
from sec_membershipusers
where username = p_NOME_USER;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return 'ERRO - Usuário não existe na base';
END;
DECLARE
CURSOR C_COLETA IS
select LOCKEDREASONID,
PASSWORD,
ISLOCKEDOUT,
CREATIONDATE,
LASTLOGINDATE,
LASTACTIVITYDATE,
LASTPASSWORDCHANGEDDATE,
LASTLOCKOUTDATE,
FAILEDPASSATTCOUNT,
FAILEDPASSATTWINDOWSTART,
LASTCHANGE,
LASTCHANGEUSER,
MEMBERSHIPUSERSTATUSID
from sec_membershipusers
where username = 'WSTSCC';
BEGIN
for r1 in C_COLETA loop
UPDATE sec_membershipusers
SET PASSWORD = r1.PASSWORD,
LOCKEDREASONID = r1.LOCKEDREASONID,
ISLOCKEDOUT = r1.ISLOCKEDOUT,
CREATIONDATE = r1.CREATIONDATE,
LASTLOGINDATE = r1.LASTLOGINDATE,
LASTACTIVITYDATE = r1.LASTACTIVITYDATE,
LASTPASSWORDCHANGEDDATE = r1.LASTPASSWORDCHANGEDDATE,
LASTLOCKOUTDATE = r1.LASTLOCKOUTDATE,
FAILEDPASSATTCOUNT = r1.FAILEDPASSATTCOUNT,
FAILEDPASSATTWINDOWSTART = r1.FAILEDPASSATTWINDOWSTART,
LASTCHANGE = r1.LASTCHANGE,
LASTCHANGEUSER = r1.LASTCHANGEUSER,
MEMBERSHIPUSERSTATUSID = r1.MEMBERSHIPUSERSTATUSID
WHERE USERNAME = p_NOME_USER;
end loop;
EXCEPTION
WHEN OTHERS THEN
RETURN '1 - ERRO AO TENTAR TROCAR SENHA' || SQLERRM;
END;
RETURN 'SENHA MODIFICADA';
END SC_FNC_TROCA_SENHA;
rodou numa boa..
se tiver alguma ideia que eu possa melhorar.. será bem vinda
BEGIN
select password
into v_coleta_user
from sec_membershipusers
where username = p_NOME_USER;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return 'ERRO - Usuário não existe na base';
END;
Ao meu ver, parece desnecessário, porque você busca os dados na variavel e não utiliza mais....