3
respostas

Como executar os blocos de código em sequência automático PLSQL , Existe outro problema que refere se a execução dos blocos de insert, estou tendo que rodar duas vezes para que o insert seja realizado.

CREATE OR REPLACE PROCEDURE CONTROLE_ENTRADA_SAIDA_MP 

--/CRIA TABELA TEMPORÁRIA PARA RECEBER AS ENTRADAS
CREATE GLOBAL TEMPORARY TABLE TB_ENTRADAS_TEMP
(
  COD_ENTRADA_TEMP NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
 -- NUNOTA NUMBER,
  CODPARC NUMBER,
  NOMEPARC VARCHAR2(200),  
--CODTIPOPER NUMBER,
  CODPROD NUMBER, 
  CODVOL VARCHAR2(2),
  QTDNEG FLOAT,
  DTMOV DATE,
  PRIMARY KEY (COD_ENTRADA_TEMP)
  );

 --/REALIZAR O INSERT DOS DADOS NA TABELA TEMPORÁRIA TB_ENTRADAS_TEMP 
 INSERT
INTO TB_ENTRADAS_TEMP
(
  CODPARC,
  NOMEPARC,
  CODPROD ,
  CODVOL ,
  QTDNEG ,
  DTMOV
)
SELECT CAB1.CODPARC AS "CODIGO PARCEIRO",
PAR1.NOMEPARC AS "NOME PARCEIRO",
PRO1.CODPROD AS "CODIGO PRODUTO",
ITE1.CODVOL "UNIDADE DE MEDIDA",
SUM(ITE1.QTDNEG) AS "QUANTIDADE ENTRADA",
CAB1.DTMOV
FROM TGFCAB CAB1
INNER JOIN TGFITE ITE1 ON (ITE1.NUNOTA = CAB1.NUNOTA)
INNER JOIN TGFPRO PRO1 ON (PRO1.CODPROD = ITE1.CODPROD)
INNER JOIN TGFPAR PAR1 ON (PAR1.CODPARC = CAB1.CODPARC)
WHERE (CAB1.CODPARC IN (11550,11551,63352,30334,65366))
AND PRO1.CODGRUPOPROD BETWEEN '3000100' AND '3000500'
AND CAB1.CODTIPOPER IN (2110, 2109)
AND ITE1.CODVOL IN ('KG','TN')
AND ITE1.STATUSNOTA='L'
GROUP BY CAB1.CODPARC,PRO1.CODPROD,ITE1.CODVOL,PAR1.NOMEPARC,CAB1.DTMOV--,IMP1.QTD, "QUANTIDADE DE REGISTROS"


--/CRIA TABELA TEMPORÁRIA PARA RECEBER AS SAÍDAS
CREATE GLOBAL TEMPORARY TABLE TB_SAIDAS_TEMP
(
  COD_SAIDA_TEMP NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  CODPARC NUMBER,
  CODPROD NUMBER, 
  QTDNEG FLOAT,
  PRIMARY KEY (COD_SAIDA_TEMP)
  );
 --/REALIZA O INSERT DOS DADOS NA TABELA TEMPORÁRIA TB_SAÍDAS_TEMP  
  INSERT
INTO TB_SAIDAS_TEMP
(
  CODPARC,
  CODPROD, 
  QTDNEG
)
SELECT DISTINCT
CAB.CODPARC,PRO.CODPROD, SUM(QTDNEG) AS "SAIDAS"

--TO_CHAR(CAB.DTMOV, 'DD/MM/YYYY') AS "DATA MOVIMENTAÇÃO"
FROM TGFCAB CAB
INNER JOIN TGFITE ITE ON (ITE.NUNOTA = CAB.NUNOTA)
INNER JOIN TGFPRO PRO ON (PRO.CODPROD = ITE.CODPROD)
WHERE (CAB.CODPARC IN (11550,11551,63352,30334,65366))
AND PRO.CODGRUPOPROD BETWEEN '3000100' AND '3000500'
AND ITE.CODVOL IN ('KG','TN')
AND ITE.STATUSNOTA='L'
AND CAB.CODTIPOPER IN (3296,2204,3204)
GROUP BY CAB.CODPARC, PRO.CODPROD --TO_CHAR(CAB.DTMOV, 'DD/MM/YYYY')
--ORDER BY TO_CHAR(CAB.DTMOV, 'DD/MM/YYYY') DESC

---/QUERY PARA O RELATÓRIO DE ACOMPANHAMENTO DE ENTRADA E SAÍDA.
SELECT TEMPE.CODPARC AS "CODIGO PARCEIRO",
    TEMPE.NOMEPARC AS "NOME PARCEIRO",
    TEMPE.CODPROD,TEMPE.CODVOL,
    TEMPE.QTDNEG AS "ENTRADA",
    SIMP.QTD AS "SINICIAL",
    SUM(TEMPE.QTDNEG + SIMP.QTD) AS "SALDO INICIAL",
    TEMPS.QTDNEG AS "SAIDAS",
    SUM(TEMPS.QTDNEG - (TEMPE.QTDNEG + SIMP.QTD)) AS "SALDO NO PARCEIRO"
FROM  TB_ENTRADAS_TEMP TEMPE
  INNER JOIN AD_TGFSIMP SIMP 
  ON TEMPE.CODPARC = SIMP.CODPARC
  AND TEMPE.CODPROD=SIMP.CODPROD
    INNER JOIN TB_SAIDAS_TEMP TEMPS
    ON TEMPS.CODPARC = SIMP.CODPARC
    AND TEMPS.CODPROD=SIMP.CODPROD
      GROUP BY TEMPE.CODPARC,TEMPE.NOMEPARC,TEMPE.CODPROD,TEMPE.CODVOL,TEMPE.QTDNEG,SIMP.QTD,TEMPS.QTDNEG

      DROP TABLE TB_ENTRADAS_TEMP
      DROP TABLE TB_SAIDAS_TEMP
3 respostas

Olá Leonildo, tudo bem?

Peço desculpas pela demora no retorno.

Tem alguns ponto que não consegui compreender muito bem, você poderia esclarecer para mim? Assim poderei tentar ti auxiliar melhor.

  • No início do bloco de códigos é criada uma procedure, mas não consegui identificar onde ela se encerra.
  • Todos esses códigos estão dentro dessa procedure? Seria isso?
  • Você precisa que esses códigos sejam executados nesta ordem que você disponibilizou?

Aguardo retorno!

Olá Danielle, obrigado pelo retorno, o código acima resolvi de uma outra forma, eu preciso de auxilio com uma trigger, segue link abaixo:

https://cursos.alura.com.br/forum/topico-cria-trigger-para-realizar-um-update-apos-um-insert-na-tabela-tgffin-161002

Fico feliz em saber que você conseguiu resolver esse problema Leonildo :).

Em relação ao outro tópico, já ti responde lá.

Bons estudos!