Ir para conteúdo

Viniciusr9

Members
  • Total de itens

    20
  • Registro em

  • Última visita

Tudo que Viniciusr9 postou

  1. Viniciusr9

    Erro no APEX_APPLICATION.G_F01 - ORACLE APEX

    Estou com um problema com esse esse script abaixo: tenho um checkbox na minha página ( não em relatório, na página mesmo, um item de página) e gostaria que o mesmo ao ser clicado e pressionado um botão submit realizasse o procedimento do script, porém ele faz o processo mas não me retorna nada. acredito que o problema seja no LOOP do APEX_APPLICATION.G_F01 . Alguém consegue me ajudar com isso? DECLARE V_DS_COLAB VARCHAR2(50); BEGIN APEX_DEBUG.MESSAGE('CHECK:'|| vCHECK); FOR A IN 1 .. APEX_APPLICATION.G_F01.COUNT LOOP BEGIN SELECT C.DS_COLABORADOR INTO V_DS_COLAB FROM COLABORADOR C WHERE C.USER_APEX = V('APP_USER') ; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20001,'NENHUM REGISTRO ENCONTRADO!'); WHEN TOO_MANY_ROWS THEN RAISE_APPLICATION_ERROR(-20002,'MAIS QUE UM REGISTRO ENCONTRADO!'); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20003,'ERRO NAO PREVISTO' || SQLERRM) ; END; :P12_SUPER := (V_DS_COLAB || ' - ' || TO_CHAR(SYSDATE,'DD/MM/RRRR HH24:MI')); UPDATE COMPETENCIA_COLABORADOR CC SET FINALIZADO_SN = 'S' WHERE CC.CD_EQUIPE = :P12_EQUIPE AND CC.CD_COMPETENCIA = (SELECT C.CD_COMPETENCIA FROM COMPETENCIA C WHERE TO_DATE(LPAD(C.MES_COMPETENCIA,2,'0') || '/' || C.ANO_COMPETENCIA,'MM/RRRR') = TO_DATE(:P12_COMPETENCIA,'MM/RRRR')); END LOOP; END;
  2. Viniciusr9

    Vaga Freelancer em Java

    Pelo título do tópico acho que não Motta kk
  3. Viniciusr9

    Horas entre datas

    Boa tarde pessoal, basicamente eu preciso do retorno de horas entre duas datas, porém tenho condições a tratar . basicamente tenho 2 colunas ( dt_fim e dt_ini ) que representam data final e data inicial. Preciso da diferença entre as duas retornada em uma outra coluna (hr_ausencias) , porém a cada dia posso computar no máximo 9 horas, e desconsiderar finais de semana e feriados( esses cadastrados em uma tabela) . Seria melhor tratar isso com uma Trigger , um Script PL/SQL , como me sugerem? Agradeço quem puder ajudar.
  4. Viniciusr9

    Horas entre datas

    indo um pouco mais além se não for abusar também, como posso fazer para setar esse resultado na coluna da tabela de ausencias ? por exemplo, abaixo tenho um update ao final do loop que carrega o resultado pra coluna de hr_ausencia referente a ultima linha inserida, porém meu resultado é sempre 0 , nao consegui encontrar o erro DECLARE VA_CONTA NUMBER := 0; VA_DT_INI DATE; VA_DT_FIM DATE; VA_QT_DIAS NUMBER := 0; VA_DT_ATUAL DATE; VA_FERIADO_SN NUMBER := 0; VA_TOT_HR_AUS NUMBER:= 0; VA_HR_AUS_SEXTA NUMBER:= 0; VA_TOT_DIAS NUMBER :=0; VA_TOT_SEXTA NUMBER := 0; BEGIN /*SELECT trunc(to_date('03/06/2019 13:00','dd/mm/yyyy hh24:mi')) - trunc(to_date('03/06/2019 18:00','dd/mm/yyyy hh24:mi')), trunc(to_date('03/06/2019 13:00','dd/mm/yyyy hh24:mi')), trunc(to_date('03/06/2019 18:00','dd/mm/yyyy hh24:mi')) into VA_QT_DIAS, VA_DT_INI, VA_DT_FIM from dual;*/ select DISTINCT (TRUNC(A.DT_FIM) - TRUNC(A.DT_INI)), A.DT_INI, A.DT_FIM INTO VA_QT_DIAS, VA_DT_INI, VA_DT_FIM FROM AUSENCIAS A WHERE A.DT_INC = (SELECT MAX(DT_INC) FROM AUSENCIAS); WHILE VA_CONTA <= VA_QT_DIAS LOOP -- VERIFICA CONTADOR(VA_CONTA) EQUANTO MENOR QUE TOTAL DE DIAS ENTRE AS DATAS (INI E FIM) VA_DT_ATUAL := VA_DT_INI + VA_CONTA; IF VA_DT_ATUAL <= VA_DT_FIM THEN --1 VERIFICA SE DATA DO LAÇO MENOR QUE DATA FINAL SELECT COUNT(*) INTO VA_FERIADO_SN FROM FERIADOS WHERE TRUNC(DT_FERIADO) = TRUNC(VA_DT_ATUAL); IF VA_FERIADO_SN = 0 THEN --2 RETORNO 0 NÃO É FERIADO IF TO_CHAR(VA_DT_ATUAL, 'D') NOT IN (1, 7) THEN --3 VERIFICA DIA DIFERENTE DE SABADO E DOMINGO VA_TOT_HR_AUS := (VA_DT_FIM - VA_DT_ATUAL) * 24; IF (TO_CHAR(VA_DT_FIM, 'HH24:MI') BETWEEN '08' AND '18') AND (TO_CHAR(VA_DT_INI, 'HH24:MI') BETWEEN '08' AND '18')THEN --4 VERIFICA SE HORA ESTÁ ENTRE 08 E 18 IF (TO_CHAR(VA_DT_ATUAL, 'D') <> (6) AND VA_TOT_HR_AUS >9) THEN --5 VERIFICA DIA DIFERENTE DE SEXTA E SE HORA MAIOR QUE 9 VA_TOT_DIAS := VA_TOT_DIAS +1; VA_TOT_HR_AUS := 9; ELSIF (TO_CHAR(VA_DT_ATUAL, 'D') = 6 AND VA_TOT_HR_AUS > 8) THEN -- VERIFICA DIA IGUAL SEXTA E SE HORA MAIOR QUE 8 VA_HR_AUS_SEXTA := 8; VA_TOT_SEXTA := VA_TOT_SEXTA +1; END IF; --5 END IF; --4 END IF; --3 END IF; --2 VA_TOT_HR_AUS := (VA_TOT_HR_AUS*VA_TOT_DIAS) + (VA_HR_AUS_SEXTA * VA_TOT_SEXTA); END IF; --1 VA_DT_ATUAL := VA_DT_ATUAL +1; VA_CONTA := VA_CONTA + 1; END LOOP; UPDATE AUSENCIAS SET HR_AUSENCIA = VA_TOT_HR_AUS WHERE DT_INC = (SELECT MAX(A.DT_INC) FROM AUSENCIAS A); END;
  5. Viniciusr9

    Horas entre datas

    Seriam 17 horas úteis certo( 9 horas da quinta e 8 horas da sexta) ? . no caso sim, são 17 horas "úteis". pra esses casos que ultrapassam um dia, a contagem retorna correto, porém pra contagens menores que um dia o resultado não está correto, por exemplo como citei DT_INI = 30/05/2019 08:00 e DT_FIM = 30/05/2019 10:00 , deve retornar 2 horas "úteis"
  6. Viniciusr9

    Horas entre datas

    você diz a coluna em questão ou o sentido do que eu quero no script ? Se for a coluna, preciso desse valor retornado dentro da coluna hr_ausencia ( da tabela ausencias) Se for o sentido do script, seriam na vdd as horas "inutilizaveis por ausencia"
  7. Viniciusr9

    Horas entre datas

    por exemplo , se testar DT_INI = 30/05/2019 08:00 e DT_FIM = 30/05/2019 10:00 eu preciso que me retorne 2 ao final ,pois são 2 horas de diferença . As horas são o que importam pra mim entre as datas
  8. Viniciusr9

    Horas entre datas

    Alguém consegue dar uma ajuda ?agradeço.
  9. Viniciusr9

    Horas entre datas

    Montei um script que está funcionando , mas notei que a conta das horas internamente não está como eu preciso, não estou conseguindo finalizar essa parte, poderia verificar e me auxiliar nesse pedaço? Tipo ele calcula as horas mas sempre um valor grande, eu preciso que dê as horas exatas , por exemplo se a DT_FIM = '30/05/2019 16:00' e DT_INI = '30/05/2019 18:00' o retorno de horas ao final na variável precisa ser 2 . segue o scritp: (deixei os output pra validar os resultados , e os comentarios nos ifs pra facilitar compreensao) DECLARE VA_CONTA NUMBER := 0; VA_DT_INI DATE; VA_DT_FIM DATE; VA_QT_DIAS NUMBER := 0; VA_DT_ATUAL DATE; VA_FERIADO_SN NUMBER := 0; VA_TOT_HR_AUS NUMBER:= 0; VA_HR_AUS_SEXTA NUMBER:= 0; VA_TOT_DIAS NUMBER :=0; VA_TOT_SEXTA NUMBER := 0; BEGIN select TRUNC(TO_DATE('31/05/2019 08:00', 'DD/MM/RRRR HH24:MI')) - TRUNC(TO_DATE('14/05/2019 09:00', 'DD/MM/RRRR HH24:MI')), TO_DATE('14/05/2019 09:00', 'DD/MM/RRRR HH24:MI'), TO_DATE('31/05/2019 08:00', 'DD/MM/RRRR HH24:MI') INTO VA_QT_DIAS, VA_DT_INI, VA_DT_FIM from DUAL; /* select DISTINCT (TRUNC(A.DT_FIM) - TRUNC(A.DT_INI)), A.DT_INI, A.DT_FIM INTO VA_QT_DIAS, VA_DT_INI, VA_DT_FIM FROM AUSENCIAS A WHERE CD_AUSENCIA = 174;*/ DBMS_OUTPUT.put_line('Dia inicial: ' || VA_DT_INI); DBMS_OUTPUT.put_line('Dia final: ' || VA_DT_FIM); DBMS_OUTPUT.put_line('total dias: ' || VA_QT_DIAS); DBMS_OUTPUT.put_line('------------------'); WHILE VA_CONTA <= VA_QT_DIAS LOOP -- VERIFICA CONTADOR MENOR QUE TOTAL DE DIAS ENTRE AS DATAS (INI E FIM) VA_DT_ATUAL := VA_DT_INI + VA_CONTA; IF VA_DT_ATUAL <= VA_DT_FIM THEN --1 VERIFICA SE DATA DO LAÇO MENOR QUE DATA FINAL SELECT COUNT(*) INTO VA_FERIADO_SN FROM FERIADOS WHERE TRUNC(DT_FERIADO) = TRUNC(VA_DT_ATUAL); -- DBMS_OUTPUT.PUT_LINE('ATUAL:' || VA_DT_ATUAL ||'FERIADO:' ||VA_FERIADO_SN);-- IF VA_FERIADO_SN = 0 THEN -- RETORNO 0 NÃO É FERIADO IF TO_CHAR(VA_DT_ATUAL, 'D') NOT IN (1, 7) THEN --2 VERIFICA DIA DIFERENTE DE SABADO E DOMINGO VA_TOT_HR_AUS := (VA_DT_FIM - VA_DT_ATUAL) * 24; IF (TO_CHAR(VA_DT_FIM, 'HH24:MI') BETWEEN '08' AND '18') AND (TO_CHAR(VA_DT_INI, 'HH24:MI') BETWEEN '08' AND '18')THEN --3 VERIFICA SE HORA ESTÁ ENTRE 08 E 18 IF (TO_CHAR(VA_DT_ATUAL, 'D') <> (6) AND VA_TOT_HR_AUS >9) THEN --4 VERIFICA DIA DIFERENTE DE SEXTA E SE HORA MAIOR QUE 9 VA_TOT_DIAS := VA_TOT_DIAS +1; VA_TOT_HR_AUS := 9; DBMS_OUTPUT.put_line('VALOR ATUAL:' || VA_TOT_HR_AUS); DBMS_OUTPUT.put_line('--------------'); ELSIF (TO_CHAR(VA_DT_ATUAL, 'D') = 6 AND VA_TOT_HR_AUS > 8) THEN -- VERIFICA DIA IGUAL SEXTA E SE HORA MAIOR QUE 8 -- VA_TOT_HR_AUS := 8; VA_HR_AUS_SEXTA := 8; DBMS_OUTPUT.put_line('VALOR ATUAL:' || VA_TOT_HR_AUS); DBMS_OUTPUT.put_line('--------------'); VA_TOT_SEXTA := VA_TOT_SEXTA +1; END IF; --4 END IF; --3 END IF; --2 VA_TOT_HR_AUS := (VA_TOT_HR_AUS*VA_TOT_DIAS) + (VA_HR_AUS_SEXTA * VA_TOT_SEXTA); END IF; --1 END IF; VA_DT_ATUAL := VA_DT_ATUAL +1; DBMS_OUTPUT.PUT_LINE('CALCULO: ' || VA_CONTA); VA_CONTA := VA_CONTA + 1; DBMS_OUTPUT.put_line('DATA ATUAL:' || VA_DT_ATUAL); END LOOP; DBMS_OUTPUT.PUT_LINE('DIA SEMANA:' || VA_TOT_DIAS); DBMS_OUTPUT.PUT_LINE('DIA SEXTA:' || VA_TOT_SEXTA); DBMS_OUTPUT.put_line('VALOR FINAL :' || ROUND(VA_TOT_HR_AUS, 2)); -- resultado retornado que me interessa END;
  10. Viniciusr9

    Teste: qual universidade você deveria mentir no CV?

    o Meu saiu Harvard.
  11. Viniciusr9

    Horas entre datas

    eu tentei uma trigger mas deu meio errado . Vou tentar pela function , só preciso pensar um pouco mais nas regras internas ( por exemplo a de contar as horas no dia e travar após passar e contar o restante dos dias) . Não sei se aqui no forum tem algum específico pra Apex, é que eu utilizo ele e seria pra aplicar dentro de um item de formulario que eu estou montando o script. Obrigado pela ajuda, qualquer coisa eu volto aqui .
  12. Viniciusr9

    Horas entre datas

    Assim, eu já vi essas várias functions , blocos e etc que tem por aí, inclusive eu tenho uma que adaptei pra me retornar a quantidade de horas estimadas a trabalhar em um mês. Meu problema esta mais em fixar um valor máximo por período entre as 2 variáveis, por exemplo DT_INI (28/05/2019 08:00 ) DT_FIM ( 30/05/2019 09:00) . num calculo direto isso daria 49horas. eu preciso que volte 19 horas ( 9horas do dia 28, 9horas do dia 29 e 1 hora do dia 30), mas to me embaralhando pra montar o script nessa parte. Se puder me dar um exemplo parecido ou um caminho pra começar isso eu agradeço .
  13. Viniciusr9

    Horas entre datas

    Bom dia Motta, analisei e ambas soluções são inviáveis para mim , eu precisaria de algo mais específico , como por exemplo : ( suponha que tenho minha data inicial no dia 31/05/2019 08:00 e a data final no dia 03/06/2019 12:00 . Nesse caso seria computado no máximo 9 horas por dia entre as datas, e desconsiderado os finais de semana e feriados , assim ao final eu teria como resultado as horas que necessito ).
  14. Boa tarde pessoal, Sei que tem varios tópicos sobre esse erro, porém analisei todos e nenhum foi aplicável ao meu caso ( a maioria era porquê o pessoal esquecia do Group By ao final das Querys) . Se alguém puder ajudar, agradeço . Os campos sem função estão inseridos no group by, porém o erro persiste . SELECT * FROM( select LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO, E.DS_EQUIPE as EQUIPE, SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) as "ESFORÇO CALCULADO" from EQUIPE E, COLABORADOR C1, COMPETENCIA C, COMPETENCIA_COLABORADOR CC, AUSENCIAS AU where E.CD_EQUIPE=CC.CD_EQUIPE and C.CD_COMPETENCIA=CC.CD_COMPETENCIA and C1.CD_COLABORADOR=CC.CD_COLABORADOR and C1.STATUS = 1 AND C1.CD_GESTOR <> C1.CD_COLABORADOR AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR GROUP BY E.DS_EQUIPE, LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA ) VT WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))
  15. Viniciusr9

    [Resolvido] ORA-00937: Não é uma função de grupo de grupo simples

    Fiz o SUM externo no Select externo e o restante mantive como o primeiro scritp que te mandei, fiz o group by dentro e fora , ai funcionou certinho. Ficou SELECt VT.PROJETO,SUM(VT.ESFORCO_CALC),VT.EQUIPE FROM( -- SCRIPT PRIMARIO -- ) VT WHERE TO_DATE(VT.PROJETO,'MM/RRRR') = TRUNC(SYSDATE,'MM') GROUP BY VT.EQUIPE,VT.PROJETO . Muito Obrigado Motta !
  16. Viniciusr9

    [Resolvido] ORA-00937: Não é uma função de grupo de grupo simples

    Desse jeito ? , assim me retorna apenas o resultado de 1501 , porém o correto que eu necessito é ( EQUIPE 1 = 1299 EQUIPE 2 = 1010 EQUIPE 3 = 147) SELECt SUM(NVL((VT.QT_HORAS_CHEIA - SUM(VT.DT_FIM - VT.DT_INI)*24 ),VT.QT_HORAS_CHEIA)) FROM( select LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA AS PROJETO, E.DS_EQUIPE as EQUIPE, AU.DT_FIM, AU.DT_INI, QT_HORAS_CHEIA from EQUIPE E, COLABORADOR C1, COMPETENCIA C, COMPETENCIA_COLABORADOR CC, AUSENCIAS AU where E.CD_EQUIPE=CC.CD_EQUIPE and C.CD_COMPETENCIA=CC.CD_COMPETENCIA and C1.CD_COLABORADOR=CC.CD_COLABORADOR and C1.STATUS = 1 AND C1.CD_GESTOR <> C1.CD_COLABORADOR AND AU.CD_COLABORADOR (+) = C1.CD_COLABORADOR AND TO_DATE(LPAD(C.MES_COMPETENCIA,2,'0') ||'/'||C.ANO_COMPETENCIA,'MM/RRRR') = TRUNC(SYSDATE,'MM') -- GROUP BY CC.QT_HORAS_CHEIA,C1.DS_COLABORADOR ) VT WHERE TO_DATE(VT.PROJETO,'MM/RRRR') = TRUNC(SYSDATE,'MM') GROUP BY VT.QT_HORAS_CHEIA,VT.EQUIPE,vt.projeto, vt.dt_ini,vt.dt_fim --WHERE VT.PROJETO = ((select to_char(sysdate, 'MM') from dual)||'/'||(select to_char(sysdate, 'RRRR') from dual))
  17. Viniciusr9

    [Resolvido] ORA-00937: Não é uma função de grupo de grupo simples

    O erro persiste Motta. Pelo que eu tava lendo na net, eu não posso ter duas funções de grupo aninhadas do tipo : SUM(NVL((CC.QT_HORAS_CHEIA - SUM(AU.DT_FIM - AU.DT_INI)*24 ),CC.QT_HORAS_CHEIA)) porém eu preciso dela pois eu preciso reduzir o QT_HORAS_CHEIA( horas totais) de SUM(AU.DT_FIM - AU.DT_INI)*24 que são as horas faltadas pra ter um retorno de horas reais. o SUM de fora acumula tudo pra mim, sem ele dá tudo errado . Será que tem alguma maneira de converter isso e retirar um SUM porém tendo o mesmo retorno ?
  18. Viniciusr9

    [Resolvido] ORA-00937: Não é uma função de grupo de grupo simples

    Continua o mesmo erro , mesmo incluindo o AU.DT_FIM e DT_INI no group by..
  19. Viniciusr9

    [Resolvido] ORA-00937: Não é uma função de grupo de grupo simples

    continua com o mesmo erro
  20. Viniciusr9

    Script com retorno de dias uteis no mês

    Script com retorno de dias uteis no mês ( desconsiderando finais de semana e feriados também ( os mesmos cadastrados em uma tabela )), ajuda! Boa tarde, alguém poderia me ajudar , tentei com alguns que vi pela net , fazendo alterações mas não consegui o que gostaria ainda. Preciso de um script que dado um valor (mês/ano) ele retorne a quantidade de dias uteis nesse mês, desconsiderando os sabados e domingos e os feriados listados na tabela de feriados, em Oracle Sql puro ou PL/SQL . Agradeço pela ajuda!
  21. Viniciusr9

    Script com retorno de dias uteis no mês

    vou testar aqui, obrigado pela ajuda Motta !
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.