e quero fazer uma função (uso o postgresql) para que insira um novo usuário, mas que verifique se o mesmo exista e retorne a password dele,
estou com dúvidas quanto aos parâmetros, pois o código é serial, ai não sei se devo passar ele ou não na função.
Se o banco mesmo gerencia esse código, não há necessidade de passar o código.
Eu, particularmente, nunca coloco o código como parâmetro, deixo que o BD faça isso.
luizfelipetx
Você quer fazer essa programação direto no plsql mesmo ?
abcs
Mariana.Vecci
drsmachado: Se eu deixar somente 4 campos na função (um a menos por causa do codigo) ele dá erro luizfelipetx: Sim quero fazer essa função no plpgsql.
Obrigadinha queridos!
drsmachado
Isso por que a query
insert into Usuario values ($1,$2,$3,$4);
indica que todas as colunas receberão algum valor.
Você precisa especificar quais colunas estará valorando.
insert into Usuario (col2, col3, col4, col5) values ($1,$2,$3,$4);
Isso se e apenas se, o codigo for gerenciado pelo banco, senão, ou você trata isso na aplicação ou cria uma outra forma de gerar o código dentro da procedure.
Mariana.Vecci
drsmachado:Obrigada! Funcionou, agora como faço para verificar se o usuário ja existe no banco?
Obrigada!
drsmachado
Então, antes do insert, é preciso fazer um select.
Não sei quais dados está passando, o interessante seria verificar por todos.
Eu uso cursor (tudo bem que nunca tentei em postgres, só no mysql), pois me permite por o valor de uma consulta em uma variável e testá-la.
Como você sabe quais parâmetros, é possível até fazer um count(coluna_qualquer). Se ele for 0, pode adicionar, senão, sai da função
Em Postgres é complicado, quando uso no MySQL acho bem mais fácil.
Espero que tenha ajudado.
Mariana.Vecci
Obrigada mais uma vez, ajudou muito, agora eu queria fazer uma outra função, uma para mudar a password do usuario,
mas to com dúvida se na hora de executar a função o usuario iria entrar com a nova password ou com todos os campos.
CREATE OR REPLACE FUNCTION atualizar_usuario(varchar(8))
RETURNs integer AS
$BODY$
declare
pass varchar(8);
BEGIN
update Usuario set pass_u = pass where pass_u = $1;
return $1;
END;
$BODY$
LANGUAGE 'plpgsql';
Obrigada!
drsmachado
Esta questão é mais complicada, afinal, é preciso certificar-se que se trata do usuário. Não sei como está tratando isto.
Enfim, eu faria uma análise de todos os dados possíveis.
Mariana.Vecci
Bom, não entendo o você quer dizer com “Não sei como está tratando”
Minha visão é de quando eu chamasse a função, ja fosse com a password nova, assim:
Ah, entendi.
Você está apenas alterando e não recuperando a senha.
Foi mal.
É que eu entendi que estaria gerando uma nova, caso o usuário a perdesse.
Sim, assim está ok.