1
resposta

Estou tendo erro em refazer o que o professor fez no video

DO $$

    DECLARE
        cursor_salarios refcursor;
        salario DECIMAL;
        total_instrutores INTEGER DEFAULT 0;
        instrutores_recebem_menos INTEGER DEFAULT 0;
        percentual DECIMAL;
    BEGIN
        SELECT instrutores_internos(7) INTO cursor_salarios;
        LOOP
            FETCH cursor_salarios INTO salario;
            EXIT WHEN NOT FOUND;
            total_instrutores := total_instrutores +1;

            IF 600::DECIMAL > salario THEN
                instrutores_recebem_menos := instrutores_recebem_menos + 1;
            END IF;
        END LOOP;
        percentual = instrutores_recebem_menos::DECIMAL / total_instrutores::DECIMAL * 100;

        RAISE NOTICE 'PERCENTUAL: % %%', percentual;
    END;

$$;

Estou tendo o seguinte erro:

ERROR: column "cursor_salario" does not exist LINE 1: SELECT cursor_salario ^ QUERY: SELECT cursor_salario CONTEXT: função PL/pgSQL instrutores_internos(integer) linha 7 em RETURN SQL statement "SELECT instrutores_internos(7)" função PL/pgSQL inline_code_block linha 10 em comando SQL SQL state: 42703

meu cursor:

DROP FUNCTION instrutores_internos;
CREATE FUNCTION instrutores_internos(id_instrutor INTEGER) RETURNS refcursor AS $$
    DECLARE
        cursor_salarios refcursor;
    BEGIN
        OPEN cursor_salarios  FOR SELECT instrutor.salario FROM instrutor WHERE id <> id_instrutor AND salario > 0;

        RETURN cursor_salario;
    END;
$$ LANGUAGE plpgsql;
1 resposta

Olá Lucas, tudo bem?

Na sua função instrutores_internos, no momento de retornar o cursor, você acabou informando o nome do cursor errado, você informou cursor_salario, sem o S ao invés de cursor_salarios:

Função instrutores internos

Realiza a correção nessa função e depois tenta executar novamente o bloco de código.

Aguardo o seu retorno!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software