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

Dúvidas quanto às Declarações

Olá. Estou tentando reproduzir o mesmo conceito apresentado na aula tentando utilizar o seguinte código:

CREATE OR REPLACE FUNCTION teste(nome_professor varchar) RETURNS varchar AS 
$$
DECLARE minha_variavel instrutor;
BEGIN 
    SELECT * INTO minha_variavel FROM public.instrutor where nome = nome_professor ;
    IF minha_variavel.salario > 200 THEN 
        RETURN 'Salário está ok';
    ELSE 
        RETURN 'Salário pode aumentar';
    END IF ;
END
$$
LANGUAGE plpgsql;

SELECT nome,teste(instrutor.nome) FROM instrutor 

Nesse caso, modifiquei a linha de código do "DECLARE" que declarava:

[...]
DECLARE instrutor instrutor;
[...]

Não entendi o motivo do código só aceitar o tipo "instrutor".

O mesmo acontece no primeiro exemplo da aula:

CREATE OR REPLACE FUNCTION salario_ok(instrutor instrutor) RETURNS varchar AS 
$$
BEGIN 
    IF instrutor.salario > 200 THEN 
        RETURN 'Salário está ok';
    ELSE 
        RETURN 'Salário pode aumentar';
    END IF ;
END;
$$
LANGUAGE plpgsql;

SELECT nome,salario_ok(instrutor) FROM instrutor;

Eu só consigo rodar esse código se salario_ok for do tipo instrutor instrutor. Não ficou claro o motivo dessa tipo de declaração.

4 respostas

Olá, Felipe. Não entendi bem sua dúvida.

Seus 2 exemplos de código que usam instrutor instrutor significam que você está usando uma variável chamada instrutor, cujo tipo é instrutor, ou seja, algo que se assemelhe a uma linha da tabela instrutor.

Olá Vinicius. Isso, a minha dúvida estava mais na questão do tipo(type) "instrutor" oriúndo da tabela instrutor. Eu não conseguia compreender como uma tabela gera um tipo de dado que pode ser usada depois. Por exemplo, a tabela instrutor gera a o tipo(type) instrutor também, seria isso?

Sempre entendi como tipo sendo varchar, integer, bigint, etc... Ou seja, no primeiro exemplo que descrevi acima eu tenho a variável "minha_variável" do type "instrutor", que seria o correspondente a uma linha da tabela instrutor.

solução!

Aahh sim, Felipe.

Então, no caso de PL/pgSQL, um registro de uma tabela pode ser representado de algumas formas. A forma mais simples, comum e mais legível é através do nome da própria tabela. O nome da tabela pode ser utilizado como um tipo, e com isso, essa variável passa a ter a "estrutura" de uma linha da tabela em questão, entende?

Entendido! Obrigado