Olá,
Gostaria de entender porque devo utilizar $1 ao invés de instrutor.salario. Testei e vi que não funciona mesmo.
create function dobra_salario(instrutor) RETURNS DECIMAL AS $$
SELECT $1.salario * 2 AS salario_pretendido;
$$ LANGUAGE SQL;
Olá,
Gostaria de entender porque devo utilizar $1 ao invés de instrutor.salario. Testei e vi que não funciona mesmo.
create function dobra_salario(instrutor) RETURNS DECIMAL AS $$
SELECT $1.salario * 2 AS salario_pretendido;
$$ LANGUAGE SQL;
Olá Sandi, tudo bem?
Peço desculpas pela demora no retorno.
Quando criamos uma função no postgreSQL e passamos parâmetros para essa função, internamente, esses parâmetros são nomeados com identificadores numérico, como por exemplo, $1 $2 $3, e assim vai.
Na função dobra_salario, é passado apenas um parâmetro, o parâmetro instrutor, então internamente esse parâmetro é nomeado de instrutor para $1, então, quando vamos chamar esse parâmetro dentro da função, utilizamos o seu identificador ao invés do nome. Por este motivo, quando você tentou utilizar o nome do parâmetro ao invés do seu identificador, não funcionou.
Para utilizar o nome do parâmetro, ao invés do identificador numérico, é necessário declarar um alias para o parâmetro, ou seja, podemos dar um apelido para ele.
Existem duas formas de declarar um alias:
Ao invés de passar só o tipo, informamos também um nome para o parâmetro, dessa forma:
CREATE FUNCTION dobra_salario(instrutor instrutor) RETURNS DECIMAL AS $$
SELECT instrutor.salario * 2 AS salario_pretendido;
$$ LANGUAGE SQL;
Passamos apenas um tipo no momento de criar a função e no bloco DECLARE, criamos um alias para o parâmetro, dessa forma:
CREATE FUNCTION dobra_salario(instrutor) RETURNS DECIMAL AS $$
DECLARE
instrutor ALIAS FOR $1;
BEGIN
RETURN instrutor.salario * 2 AS salario_pretendido;
END;
$$ LANGUAGE plpgsql;
Normalmente a primeira é a forma mais utilizada, passando o tipo e nome do parâmetro na criação da função. Mas, fique a vontade para utilizar a forma que desejar Sandi.
Vou deixar aqui para você também, o link da documentação do PostgreSQL onde é abordado sobre este assunto, e que você pode consultar caso queira ver mais sobre isso, mas caso você tenha uma nova dúvida é só falar Sandi.
Espero ter ajudado e bons estudos!