Manipulating data and dates in oracle

Asked

Viewed 20 times

0

I am developing a report with a view with Oracle database, and I need to make a function where the output value will be the running days since the last product drive, ie basically present day less last drive day(SYSDATE - ULTMOVSAIDA), does anyone know how I can manipulate this data to make use function function?

That would be my view:

CREATE OR REPLACE VIEW LEO_POSICAOESTOQUE AS
SELECT PRO.CODIGOPRODUTO,
       PRO.DESCRICAOPRODUTO,
       SUM(LES.QUANTIDADEATUAL + LES.QUANTIDADEBLOQUEADO) AS QUANTIDADE,
       SUM((LES.QUANTIDADEATUAL + LES.QUANTIDADEBLOQUEADO / LES.FATORTIPOUC) * NVL(LES.PESOBRUTO, TUC.PESOBRUTO)) AS PESOBRUTO,
       SUM((LES.QUANTIDADEATUAL + LES.QUANTIDADEBLOQUEADO / LES.FATORTIPOUC) * NVL((LES.ALTURA  * LES.LARGURA * LES.COMPRIMENTO), (TUC.ALTURA  * TUC.LARGURA * TUC.PROFUNDIDADE))) AS M3,
       (SELECT MAX(DATAMOVIMENTO)
          FROM LOTEENTRADA LOT,
               DOCUMENTOENTRADA DCE
         WHERE LOT.CODIGOESTABELECIMENTO = LE.CODIGOESTABELECIMENTO
          AND LOT.CODIGOMATRIZ = LE.CODIGOMATRIZ
          AND LOT.CODIGOPRODUTO = LE.CODIGOPRODUTO
          AND DCE.CODIGOESTABELECIMENTO = LOT.CODIGOESTABELECIMENTO
          AND DCE.CODIGOEMPRESA = LOT.CODIGOEMPRESA
          AND DCE.TIPODOCUMENTO = LOT.TIPODOCUMENTO
          AND DCE.SERIEDOCUMENTO = LOT.SERIEDOCUMENTO
          AND DCE.DOCUMENTOENTRADA = LOT.DOCUMENTOENTRADA
          AND DCE.ESTADODOCUMENTO IN (23,25)) AS MOVENTRADA,
       (SELECT MAX(DATAMOVIMENTO)
          FROM LOTESAIDA LTS,
               DOCUMENTOSAIDA DCS
         WHERE LTS.CODIGOESTABELECIMENTO = LE.CODIGOESTABELECIMENTO
          AND LTS.CODIGOMATRIZ = LE.CODIGOMATRIZ
          AND LTS.CODIGOPRODUTO = LE.CODIGOPRODUTO
          AND DCS.CODIGOESTABELECIMENTO = LTS.CODIGOESTABELECIMENTO
          AND DCS.CODIGOEMPRESA = LTS.CODIGOEMPRESA
          AND DCS.TIPODOCUMENTO = LTS.TIPODOCUMENTO
          AND DCS.SERIEDOCUMENTO = LTS.SERIEDOCUMENTO
          AND DCS.DOCUMENTOSAIDA = LTS.DOCUMENTOSAIDA
          AND DCS.ESTADODOCUMENTO IN (23,25)) AS MOVSAIDA
      EMP.CODIGOEMPRESA,
      EMP.DESCRICAOEMPRESA
      
  FROM PRODUTO PRO,
       LOTEENTRADA LE,
       LOTEENTRADASEQUENCIA LES,
       TIPOUC TUC,
       EMPRESA EMP

  -- JOIN ENTRE PRODUTO / LOTEENTRADA
WHERE PRO.CODIGOEMPRESA = LE.CODIGOMATRIZ
  AND PRO.CODIGOPRODUTO = LE.CODIGOPRODUTO
  -- JOIN ENTRE LOTEENTRADA / LOTEENTRADASEQUENCIA
  AND LE.CODIGOESTABELECIMENTO = LES.CODIGOESTABELECIMENTO
  AND LE.LOTEENTRADA = LES.LOTEENTRADA
  -- PARA SALDO A SOMATORIA QUANTIDADEATUAL + QUANTIDADEBLOQUEADA DEVE SER MAIOR QUE ZERO
  AND (LES.QUANTIDADEATUAL + LES.QUANTIDADEBLOQUEADO) > 0
  -- JOIN ENTRE A TABELA LOTEENTRADASEQUENCIA E TIPOUC
  AND LE.CODIGOMATRIZ = TUC.CODIGOEMPRESA
  AND LE.CODIGOPRODUTO = TUC.CODIGOPRODUTO
  AND LES.TIPOUC = TUC.TIPOUC

GROUP BY PRO.CODIGOPRODUTO,
      PRO.DESCRICAOPRODUTO,
      LE.CODIGOESTABELECIMENTO,
      LE.CODIGOMATRIZ,
      LE.CODIGOPRODUTO,
      EMP.CODIGOEMPRESA,
      EMP.DESCRICAOEMPRESA;

That was my attempt(But fails):

TO_DATE(SYSDATE, 'DD/MM/YYYY') - TO_DATE((SELECT MAX(DATAMOVIMENTO)
          FROM LOTESAIDA LTS,
               DOCUMENTOSAIDA DCS
         WHERE LTS.CODIGOESTABELECIMENTO = LE.CODIGOESTABELECIMENTO
          AND LTS.CODIGOMATRIZ = LE.CODIGOMATRIZ
          AND LTS.CODIGOPRODUTO = LE.CODIGOPRODUTO
          AND DCS.CODIGOESTABELECIMENTO = LTS.CODIGOESTABELECIMENTO
          AND DCS.CODIGOEMPRESA = LTS.CODIGOEMPRESA
          AND DCS.TIPODOCUMENTO = LTS.TIPODOCUMENTO
          AND DCS.SERIEDOCUMENTO = LTS.SERIEDOCUMENTO
          AND DCS.DOCUMENTOSAIDA = LTS.DOCUMENTOSAIDA
          AND DCS.ESTADODOCUMENTO IN (23,25))) AS DIAS 
  • What is the message of the failure? What is the expected result? What is the result? In this attempt, it contains a select at first?

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.