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?– Clarck Maciel