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 ✓.