Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como executar os blocos de código em sequência automático

Por favor poderiam me explicar como faço para que os blocos sejam executados em sequência usando PLSQL.

Eu preciso incluir esse código em um relatório, e como executo uma procedure no SQL Developer?.

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 


2 respostas
solução!

leonildo bom dia.

Voce precisa colocar ; no final de todos os blocos. Executando o codigo todo dentro da mesma janela, tendo ; ele ja executa em sequencia

Desculpa Rafael eu não entendi poderia exemplificar, porque mesmo eu colocando dentro da mesma janela todo código, não está executando na sequencia, e identifiquei outro problema, mesmo eu rodando manualmente cada bloco, preciso rodar duas vezes o insert para inserir os dados na tabela temporária.