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;
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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!