1
resposta

Erro em drop function salario_ok "is not unique"

Olá,

fui fazer um exercício extra para aprender mais e criei uma função salario_ok onde ao invés de deixar o "200" fixo, transformei em variável.

Na imagem, a primeira função é da aula e a segunda é a que fiz para treinar.

O estranho é que para usar a função, ele aceita o comando com e sem o valor variável, se eu não declarar um valor, ele assume "200". E quando eu vou deletar a função para continuar o treinamento dá esse erro de "salario_ok" is not unique.

É como se as duas funções existissem com o mesmo nome.

Alguém sabe o que está acontecendo?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, Luciana! Tudo bem?

Peço desculpas pela demora em retornar.

Antes de tudo, gostaria de te parabenizar pela iniciativa e proatividade em criar uma nova função (que por sinal é uma excelente ideia)! Agora, vamos para a explicação?

Ambos os problemas que você compartilhou acontecem porque, embora com o mesmo nome, as duas funções chamadas salario_ok exigem parâmetros distintos. Nesse sentido, após processadas, elas são armazenadas em locais diferentes da nossa memória.

Portanto, quando chamamos a função salario_ok, não fica explícito a qual das duas funções estamos nos referindo. Ao passar somente o instrutor.* como parâmetro, subtende-se que a função a ser executada é a primeira (já que ela só exige esse valor). Por outro lado, quando informamos o instrutor.* e o valor, a função a ser executada passa a ser a segunda!

Essa ideia se estende para a exclusão da função. Como ambas têm o mesmo nome, precisamos, de outra maneira, especificar qual delas será deletada. Caso contrário, o pgAdmin apresentará uma mensagem de erro indicando que salario_ok não é única.

Para deletar a primeira função, usaremos o seguinte comando:

DROP FUNCTION salario_ok(instrutor instrutor);

Por outro lado, se o seu objetivo é deletar a segunda função, o comando é este aqui:

DROP FUNCTION salario_ok(instrutor instrutor, valor INTEGER);

Observe que, nos dois cenários acima, foi necessário informar os parâmetros de salario_ok para excluí-la. Tendo em vista que a parte que as difere durante a chamada são os parâmetros, usaremos justamente eles para efetivar a exclusão!

Luciana, espero ter ajudado! Se surgirem novas dúvidas após a minha explicação ou durante os seus estudos, fico à disposição.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.