Boa noite,
tentei resolver de todas maneiras mas continua dando esse erro: ERROR:faltando "FROM or IN" ao fim da expressão SQL LINE 18: FETCH cursor_salario INTO salario; ^ SQL state: 42601 Character: 606
no trecho de código abaixo.
CREATE OR REPLACE FUNCTION cria_instrutor() RETURNS TRIGGER AS $$
DECLARE
media_salarial DECIMAL;
instrutores_recebem_menos INTEGER DEFAULT 0;
total_instrutores INTEGER DEFAULT 0;
salario DECIMAL;
percentual NUMERIC(10,2);
cursor_salarios refcursor;
BEGIN
SELECT AVG(instrutor.salario) INTO media_salarial FROM instrutor WHERE id <> NEW.id;
IF NEW.salario > media_salarial THEN
INSERT INTO log_instrutores(informacao) VALUES (NEW.nome || ' recebe acima da média');
END IF;
SELECT instrutores_internos(NEW.id) INTO cursor_salarios;
LOOP
FETCH cursor_salario INTO salario;
EXIT WHEN NOT FOUND;
total_instrutores := total_instrutores + 1;
IF NEW.salario > salario THEN
instrutores_recebem_menos := instrutores_recebem_menos + 1;
END IF;
END LOOP;
percentual = instrutores_recebem_menos::DECIMAL / total_instrutores::DECIMAL * 100;
ASSERT percentual < 100::DECIMAL, 'Instrutores novos não podem receber mais que os antigos';
INSERT INTO log_instrutores (informacao, media_do_momento, teste)
VALUES (NEW.nome || ' recebe mais do que ' || instrutores_recebem_menos || ' de ' || total_instrutores ||
' instrutores (' || percentual || '%) da grade de instrutores', media_salarial, '');
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION instrutores_internos(id_instrutor INTEGER) RETURNS refcursor AS $$
DECLARE
cursor_salario refcursor;
BEGIN
OPEN cursor_salario FOR SELECT instrutor.salario FROM instrutor WHERE id <> id_instrutor AND salario > 0;
RETURN cursor_salario;
END;
$$ LANGUAGE plpgsql;
Agradeceria qualquer ajuda a consertar qualquer erro que eu tenha cometido. Obrigado.