Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida em function

Nesse exemplo create function instrutores_bem_pagos(valor_salario decimal) ...

Não é a tabela inteira, como no exemplo anterior, mas também não é nenhuma coluna em especifico. Pode me explicar, utilizando algum outro exemplo? Não puxaria uma função dessa maneira. Mas utilizando por exemplo, a function abaixo eu tinha entendido.

create or replace function dobro_do_salario(tabela) returns decimal as $$
    select $1.salario * 2 as dobro
$$ LANGUAGE SQL;

Muito obrigado!

2 respostas
solução!

Olá Gabriel, tudo bem?

Vou tentar te explicar da forma mais clara possível sobre este exemplo da função instrutores_bem_pagos.

Como foi mencionado pelo instrutor, existem dois tipos de retorno, o simples e o composto:

  • Retorno Simples:

Quando o retorno da função é simples, ele é utilizado como um campo.

  • Retorno Composto:

Quando o retorno da função é composto, ele é utilizado como uma tabela.

Neste caso do exemplo da função instrutores_bem_pagos, o retorno da função é composta. Como o instrutor explicou, o retorno vai sempre ser o primeiro item do ultimo comando SQL, ou seja, apenas uma linha com os registros será retornada pela função.

O instrutor precisa que seja retornado todos os instrutores, ou seja, todos as informações dos instrutores que estão armazenados na tabela, que tenham um salário maior que um número X, porém retornando apenas uma linha, esse resultado não seria possível.

Então o instrutor utiliza a função SETOF, com essa função é possível retornar todas as linhas do resultado consulta, ou seja, todos os intrutores que tenham um salário maior que o número passado para a função.

Então caso você esteja precisando de uma função, onde seja necessário retorna várias linhas em vez de apenas uma, você pode utilizar o comando SETOF.

Espero ter ajudado, qualquer dúvida é só falar e bons estudos!

Pelo que entendi da sua pergunta a função seria apenas uma função de multiplicação simples então ficaria assim:

CREATE OR REPLACE FUNCTION dobro_do_salario(valor_salario DECIMAL) RETURNS DECIMAL AS $$
    SELECT $1 * 2 AS Dobro --aqui este nome e apenas informativo
$$ LANGUAGE SQL;

Podendo ser assim também:

CREATE OR REPLACE FUNCTION dobro_do_salario(valor_salario DECIMAL) RETURNS DECIMAL AS $$
    SELECT valor_salario * 2 AS Dobro --aqui este nome e apenas informativo
$$ LANGUAGE SQL;

Sendo assim essa função traz como retorno o dobro do numero informado.

Espero ter ajudado.