Dùvida Procedure
Bom dia pessoal,
Eu tenho as seguintes tabelas:
Cheguei neste ponto, mas está dando um erro:
Erro:
Com "set server..." antes do begin, da mais erro.
Alguém tem uma sugestão?
Abraços.
Eu tenho as seguintes tabelas:
Create table FUNCIONARIOS (num number, nome varchar2(30), custo_hora number); Create table PROJETOS (cod number, nome varchar2(15), custo_acc number(10,2), horas_acc(10,2)); Create table ALOCACAO_REAL (semana number, horas_trab number, cod_proj number, num_func number); Create table ALOCACAO_PREV (horas_prev_sem number, cod_proj number, num_func number); Preciso criar uma procedure que: verifique e aponte quais funcionários estão trabalhando em cada projeto na média das 4 últimas semanas, acima da quantidade de horas previstas para aquele funcionário dentro daquele Projeto.
Cheguei neste ponto, mas está dando um erro:
create or replace procedure func_horas_excedentes as /* set serveroutput on; */ begin for x in (select * from ALOCACAO_PREV) loop x.num_func; x.cod_proj; x.horas_prev_sem; select max semana into ult_semana from ALOCACAO_REAL where num_func = x.num; select avg (horas_trab) into media from ALOCACAO_REAL where semana > (ult_semana -4); select * from ALOCACAO_REAL where num_func = x.num_func and cod_proj = x.cod_proj and media > x.horas_prev_sem; /* dbms_output.put_line ('Func: ','Projeto: ','Media Horas Trabalhadas: ','Horas Previstas: ',|| x.num_func, x.cod_proj, media, x.horas_prev_sem); */ end loop; commit; end; /
Erro:
Errors: PROCEDURE FUNC_HORAS_EXCEDENTES Line/Col: 12/13 PL/SQL: SQL Statement ignored Line/Col: 12/17 PL/SQL: ORA-00922: missing or invalid option Line/Col: 13/104 PLS-00103: Encountered the symbol "|" when expecting one of the following: ( - + case mod new not null <an identifier> <a double-quoted delimited-identifier> <a bind variable> continue avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string> pipe <an alternatively-quoted string literal with character set specification> <an alternatively
Com "set server..." antes do begin, da mais erro.
Alguém tem uma sugestão?
Abraços.
Caitano
Curtidas 0
Respostas
Emerson Nascimento
25/03/2020
não entendi muito bem a tua necessidade, mas acredito que seja possível resolver numa query:
select AP.num_func, AP.cod_proj, avg(AR.horas_trab) media, AP.horas_prev_sem from ALOCACAO_PREV AP left join (select num_func, cod_proj, max(semana) ult_semana -- ultima semana por projeto from ALOCACAO_REAL group by num_func, cod_proj) US on US.num_func = AP.num_func and US.cod_proj = AP.cod_proj left join ALOCACAO_REAL AR on AR.num_func = AP.num_func and AR.cod_proj = AP.cod_proj and AR.semana > (US.ult_semana - 4) group by AP.num_func, AP.cod_proj, AP.horas_prev_sem having avg(AR.horas_trab) > AP.horas_prev_sem
GOSTEI 0