Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #101925
    Athayde
    Participante

      Boa tarde Senhores(as) estou com um problema atípico, preciso alterar o conteúdo de um cursor dinamicamente em uma procedure no banco oracle 10, estava pesquisando o comando DBMS_Sql mas não consegui nenhum exemplo pratico que me atendesse, o mais perto que cheguei foi um exemplo que usa array que não me serve pois não sei a quantidade de linhas.
      Eu preciso fazer o seguinte:
      Preciso montar o SQL dinamicamente para poder através dele, abrir um cursor pelo qual vou ler tratar e gravar seus dados em uma tabela temporária.
      Se alguém tiver um exemplo prático que me atenda agradeceria muito.

      #101998
      Ishii
      Participante

        Olá,

        Antes até de tentar resolver o problema eu consultei um pouco no google…

        http://www.viamais.net/blog/?p=2585

        Tinha certeza que funcionava mas resolvi pesquisar antes e já achei vários exemplos…

        []s Ishii

        #102035
        jurupoc
        Participante

          Veja se ajuda:

          CREATE OR REPLACE
          PROCEDURE calculo_tblprogcompras (
          NLOJA_ESTOQUE NUMBER,
          NDEP_ESTOQUE NUMBER,
          NLOJA_INSP NUMBER,
          NDEP_INSP NUMBER,
          NVALOR_VARIAVEL_PRO_DIARIA NUMBER,
          NPARAMETROS_SELECT VARCHAR2)

          AS TYPE cur_typ IS REF CURSOR;
          nPRO_CODIGO NUMBER(10,0);
          nLJA_CODIGO NUMBER(10,0);
          nRED_PRODUTO_KEY NUMBER(10,0);
          nCLF_CODIGO NUMBER;
          nCLF_RAZNOM VARCHAR2(60);
          nPRO_MASKCOD VARCHAR2(20);
          nPRO_DESCRICAO VARCHAR2(80);
          nPRO_UNIDADE VARCHAR2(3);
          nACA_CODIGO NUMBER(10,0);
          nPAD_DESCRICAO VARCHAR2(20);
          nCONS30D NUMBER;
          nEST_INSP_EMP NUMBER;
          nPED_NO_FORNECEDOR NUMBER;
          nPEDIR_PARA_CARTEIRA NUMBER;
          nPEDIR_PROG NUMBER;
          nEXCESSO_FORNECEDOR NUMBER;
          nDR NUMBER(10,0);
          nPRO_LOTE_REPOSICAO NUMBER(15,3);
          nPRO_PTO_REPOSICAO NUMBER(15,3);
          nPEDIR NUMBER;
          nTOC_PRECO NUMBER;
          nLOTE NUMBER;
          nVLR_LOTE NUMBER;
          nCOLUNAD NUMBER;
          nVR_EXC NUMBER;
          nNEC_CARTEIRA NUMBER;
          nNEC_PROGRAMA NUMBER;
          nREC_CARTEIRA NUMBER;
          nREC_PROGRAMA NUMBER;
          nNUMERO_OC NUMBER;
          nSEM_DE_FATO CHAR(11);
          nSEM_DE_FATO2 CHAR(12);
          nPRAZO VARCHAR2(100);
          nPRO_ESTMINIMO NUMBER(15,3);
          nRED_PROD_KEY_FICHATEC NUMBER;
          nQtdeTransferencia NUMBER(15,4);
          nSOMACONS30D NUMBER;
          nSOMANEC_CARTEIRA NUMBER;
          nVALOR_ESTOQUE NUMBER;
          nNQTDE_PEDIDO NUMBER;
          v_QUERY_STR VARCHAR2(32000);
          c CUR_TYP;

          BEGIN
          DELETE FROM TEMP_COMPRAS;
          v_QUERY_STR:= 'SELECT
          PRODUTO.PRO_CODIGO,
          PRODUTO.LJA_CODIGO,
          PRODUTO.RED_PRODUTO_KEY,
          (SELECT
          MAX(CAPA_ORDEM_COMPRA.CLF_CODIGO)
          FROM
          TABELA_ORDEM_COMPRA
          JOIN CAPA_ORDEM_COMPRA ON (
          TABELA_ORDEM_COMPRA.LJA_CODIGO = CAPA_ORDEM_COMPRA.LJA_CODIGO AND
          TABELA_ORDEM_COMPRA.COC_NUMERO = CAPA_ORDEM_COMPRA.COC_NUMERO AND
          CAPA_ORDEM_COMPRA.COC_STATUS = '||chr(39)||'A'||chr(39)||')
          WHERE
          PRODUTO.LJA_CODIGO = TABELA_ORDEM_COMPRA.LJA_CODIGO_RED AND
          PRODUTO.RED_PRODUTO_KEY = TABELA_ORDEM_COMPRA.RED_PRODUTO_KEY) "CLF_CODIGO",
          '||chr(39)||'CLF_RAZNOM'||chr(39)||' "CLF_RAZNOM",
          PROPRODUTOS.PRO_MASKCOD,
          PROPRODUTOS.PRO_DESCRICAO,
          PROPRODUTOS.PRO_UNIDADE,
          PROPRODUTOS.ACA_CODIGO,
          (SELECT
          PROPADROES.PAD_DESCRICAO
          FROM
          PROPADROES
          WHERE
          PROPADROES.PAD_CODIGO = PROPRODUTOS.ACA_CODIGO) "PAD_DESCRICAO",

                     0 "CONS30D",
          
                      (NVL((SELECT SUM(NVL(STK1.TAB_QUANTIDADE, 0))
                          FROM FATESTOQUE_PRODUTO STK1
                          WHERE
                              STK1.LJA_CODIGO = PRODUTO.LJA_CODIGO AND 
                              STK1.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND 
                              STK1.LJA_CODIGO_EST = '||NLOJA_ESTOQUE||' AND 
                              STK1.DEP_CODIGO = '||NDEP_ESTOQUE||'),0)
                          +
                          NVL((SELECT SUM(NVL(STK2.TAB_QUANTIDADE, 0))
                          FROM FATESTOQUE_PRODUTO STK2
                          WHERE
                              STK2.LJA_CODIGO = PRODUTO.LJA_CODIGO AND 
                              STK2.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND 
                              STK2.LJA_CODIGO_EST = '||NLOJA_INSP||' AND 
                              STK2.DEP_CODIGO = '||NDEP_INSP||'),0)
                          -
                          NVL((SELECT SUM(NVL(TABELA_MOV_MATERIAIS.MOM_QUANTIDADE, 0))
                          FROM 
                              TABELA_MOV_MATERIAIS
                              JOIN CAPA_MOV_MATERIAIS ON (
                                  CAPA_MOV_MATERIAIS.LJA_CODIGO = TABELA_MOV_MATERIAIS.LJA_CODIGO AND 
                                  CAPA_MOV_MATERIAIS.CMM_NUMERO = TABELA_MOV_MATERIAIS.CMM_NUMERO)
                          WHERE
                              TABELA_MOV_MATERIAIS.LJA_CODIGO_PRO = PRODUTO.LJA_CODIGO AND 
                              TABELA_MOV_MATERIAIS.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND 
                              CAPA_MOV_MATERIAIS.CMM_TIPO = '||chr(39)||'RM'||chr(39)||' AND 
                              CAPA_MOV_MATERIAIS.CMM_BAIXA IS NULL            
                      ),0)) "EST_INSP_EMP",
          
                      0 "PED_NO_FORNECEDOR",
          
          
                      (NVL((SELECT SUM(NVL(STK1.TAB_QUANTIDADE,0))
                          FROM FATESTOQUE_PRODUTO STK1
                          WHERE
                              STK1.LJA_CODIGO = PRODUTO.LJA_CODIGO AND 
                              STK1.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND 
                              STK1.LJA_CODIGO_EST = '||NLOJA_ESTOQUE||' AND 
                              STK1.DEP_CODIGO = '||NDEP_ESTOQUE||'),0)
                          +
                          NVL((SELECT SUM(NVL(STK2.TAB_QUANTIDADE, 0))
                          FROM FATESTOQUE_PRODUTO STK2
                          WHERE
                              STK2.LJA_CODIGO = PRODUTO.LJA_CODIGO AND 
                              STK2.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND 
                              STK2.LJA_CODIGO_EST = '||NLOJA_INSP||' AND 
                              STK2.DEP_CODIGO = '||NDEP_INSP||'),0)     
                          - 
                          NVL((
                              SELECT 
                                  SUM(NVL(TABELA_MOV_MATERIAIS.MOM_QUANTIDADE,0))
                              FROM
                                  TABELA_MOV_MATERIAIS
                                  JOIN CAPA_MOV_MATERIAIS ON (
                                      CAPA_MOV_MATERIAIS.LJA_CODIGO = TABELA_MOV_MATERIAIS.LJA_CODIGO AND
                                      CAPA_MOV_MATERIAIS.CMM_NUMERO = TABELA_MOV_MATERIAIS.CMM_NUMERO)
                              WHERE
                                  TABELA_MOV_MATERIAIS.LJA_CODIGO_PRO = PRODUTO.LJA_CODIGO AND 
                                  TABELA_MOV_MATERIAIS.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND 
                                  CAPA_MOV_MATERIAIS.CMM_TIPO = '||chr(39)||'RM'||chr(39)||'
                          ),0)
          
                          +
                          NVL((SELECT
                              SUM(NVL(TABELA_ORDEM_COMPRA.TOC_QUANTIDADE,0))
                          FROM
                              TABELA_ORDEM_COMPRA
                              JOIN CAPA_ORDEM_COMPRA ON (
                                  CAPA_ORDEM_COMPRA.LJA_CODIGO = TABELA_ORDEM_COMPRA.LJA_CODIGO AND 
                                  CAPA_ORDEM_COMPRA.COC_NUMERO = TABELA_ORDEM_COMPRA.COC_NUMERO)
                          WHERE
                              TABELA_ORDEM_COMPRA.LJA_CODIGO_RED = PRODUTO.LJA_CODIGO AND 
                              TABELA_ORDEM_COMPRA.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND 
                              CAPA_ORDEM_COMPRA.COC_STATUS IN ('||chr(39)||'A'||chr(39)||','||chr(39)||'P'||chr(39)||')),0)
                          -
                          NVL((SELECT
                              SUM(NVL(FATTABPEDIDO.TPE_QUANTIDADE * PRODETFICHATEC.DFT_QUANTIDADE,0))
                          FROM 
                              PRODETFICHATEC
                              JOIN PROCAPAFICHATEC ON (
                                  PROCAPAFICHATEC.CFT_CODIGO = PRODETFICHATEC.CFT_CODIGO)
                              JOIN FATTABPEDIDO ON (
                                  FATTABPEDIDO.LJA_CODIGO_RED = PROCAPAFICHATEC.LJA_CODIGO_PRO AND 
                                  FATTABPEDIDO.RED_PRODUTO_KEY = PROCAPAFICHATEC.RED_PRODUTO_KEY)
                              JOIN FATCPPEDIDO ON (
                                  FATCPPEDIDO.LJA_CODIGO = FATTABPEDIDO.LJA_CODIGO AND 
                                  FATCPPEDIDO.CPE_CODIGO = FATTABPEDIDO.CPE_CODIGO)
                          WHERE
                              FATTABPEDIDO.LJA_CODIGO_RED = PRODUTO.LJA_CODIGO AND
                              FATTABPEDIDO.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND
                              FATCPPEDIDO.CPE_STATUS IN ('||chr(39)||'A'||chr(39)||', '||chr(39)||'P'||chr(39)||')),0)
                      ) "PEDIR_PARA_CARTEIRA",
                      0.00 "PEDIR_PROG",
                      0.00 "EXCESSO_FORNECEDOR",
                      PROPRODUTOS.PRO_DIAS_REPOSICAO "DR",
                      PROPRODUTOS.PRO_LOTE_REPOSICAO,
                      PROPRODUTOS.PRO_PTO_REPOSICAO,
                      0.00 "PEDIR",
                      NVL((SELECT 
                          max(TABELA_ORDEM_COMPRA.TOC_PRECO)
                       FROM 
                          TABELA_ORDEM_COMPRA
                          JOIN CAPA_ORDEM_COMPRA ON (
                              TABELA_ORDEM_COMPRA.LJA_CODIGO = CAPA_ORDEM_COMPRA.LJA_CODIGO AND 
                              TABELA_ORDEM_COMPRA.COC_NUMERO = CAPA_ORDEM_COMPRA.COC_NUMERO AND 
                              CAPA_ORDEM_COMPRA.COC_STATUS = '||chr(39)||'A'||chr(39)||')
                          WHERE
                              PRODUTO.LJA_CODIGO = TABELA_ORDEM_COMPRA.LJA_CODIGO_RED AND 
                              PRODUTO.RED_PRODUTO_KEY = TABELA_ORDEM_COMPRA.RED_PRODUTO_KEY), 
                      PROPRODUTOS.PRO_VALOR_ULT_CUSTO) "TOC_PRECO",
                      0.00 "LOTE",
                      0.00 "VLR_LOTE",
                      0.00 "COLUNAD",
                      0.00 "VR_EXC",
                      (NVL((SELECT
                              SUM(NVL(FATTABPEDIDO.TPE_QUANTIDADE * PRODETFICHATEC.DFT_QUANTIDADE,0))
                          FROM
                              PRODETFICHATEC
                              JOIN PROCAPAFICHATEC ON (
                                  PROCAPAFICHATEC.CFT_CODIGO = PRODETFICHATEC.CFT_CODIGO)
                              JOIN FATTABPEDIDO ON (
                                  FATTABPEDIDO.LJA_CODIGO_RED = PROCAPAFICHATEC.LJA_CODIGO_PRO AND
                                  FATTABPEDIDO.RED_PRODUTO_KEY = PROCAPAFICHATEC.RED_PRODUTO_KEY)
                              JOIN FATCPPEDIDO ON (
                                  FATCPPEDIDO.LJA_CODIGO = FATTABPEDIDO.LJA_CODIGO AND
                                  FATCPPEDIDO.CPE_CODIGO = FATTABPEDIDO.CPE_CODIGO)
                          WHERE
                              FATTABPEDIDO.LJA_CODIGO_RED = PRODUTO.LJA_CODIGO AND
                              FATTABPEDIDO.RED_PRODUTO_KEY = PRODUTO.RED_PRODUTO_KEY AND
                              FATCPPEDIDO.CPE_STATUS IN ('||chr(39)||'A'||chr(39)||', '||chr(39)||'P'||chr(39)||')),0)
                      ) "NEC_CARTEIRA",
                      0.00 "NEC_PROGRAMA",
                      0.00 "REC_CARTEIRA",
                      0.00 "REC_PROGRAMA",
                      (SELECT
                         MAX(CAPA_ORDEM_COMPRA.COC_NUMERO)
                      FROM
                         TABELA_ORDEM_COMPRA
                         JOIN CAPA_ORDEM_COMPRA ON (
                             TABELA_ORDEM_COMPRA.LJA_CODIGO = CAPA_ORDEM_COMPRA.LJA_CODIGO AND
                             TABELA_ORDEM_COMPRA.COC_NUMERO = CAPA_ORDEM_COMPRA.COC_NUMERO AND
                             CAPA_ORDEM_COMPRA.COC_STATUS = '||chr(39)||'A'||chr(39)||')
                         WHERE
                             PRODUTO.LJA_CODIGO = TABELA_ORDEM_COMPRA.LJA_CODIGO_RED AND
                             PRODUTO.RED_PRODUTO_KEY = TABELA_ORDEM_COMPRA.RED_PRODUTO_KEY) "NUMERO_OC",
                      '||chr(39)||'SEM_DE_FATO'||chr(39)||' "SEM_DE_FATO",
                      '||chr(39)||'SEM_DE_FATO2'||chr(39)||' "SEM_DE_FATO2",
                      '||chr(39)||'PRAZO'||chr(39)||' "PRAZO",
                      PROPRODUTOS.pro_estminimo
          
                  FROM
                      PROREDUZIDOPRODUTO "PRODUTO" 
                      JOIN PROPRODUTOS ON (
                          PROPRODUTOS.LJA_CODIGO = PRODUTO.LJA_CODIGO AND 
                          PROPRODUTOS.PRO_CODIGO = PRODUTO.PRO_CODIGO)
                  WHERE
                      PRODUTO.PAD_CODIGO IS NULL AND 
                      PRODUTO.GRD_CODIGO IS NULL '||NPARAMETROS_SELECT;
          
                      OPEN c FOR v_query_str;
                          LOOP
                              FETCH c INTO  nPRO_CODIGO,nLJA_CODIGO,nRED_PRODUTO_KEY,nCLF_CODIGO,nCLF_RAZNOM,nPRO_MASKCOD,nPRO_DESCRICAO,nPRO_UNIDADE,nACA_CODIGO,nPAD_DESCRICAO,nCONS30D,nEST_INSP_EMP,nPED_NO_FORNECEDOR,nPEDIR_PARA_CARTEIRA,nPEDIR_PROG,nEXCESSO_FORNECEDOR,nDR,nPRO_LOTE_REPOSICAO,nPRO_PTO_REPOSICAO,nPEDIR,nTOC_PRECO,nLOTE,nVLR_LOTE,nCOLUNAD,nVR_EXC,nNEC_CARTEIRA,nNEC_PROGRAMA,nREC_CARTEIRA,nREC_PROGRAMA,nNUMERO_OC,nSEM_DE_FATO,nSEM_DE_FATO2,nPRAZO,nPRO_ESTMINIMO;  
                                  EXIT WHEN c%NOTFOUND;
                                       SELECT 
                                          min(FIACLIFORN.CLF_RAZNOM)
                                       into
                                          nCLF_RAZNOM
                                       FROM 
                                          FIACLIFORN
                                       WHERE
                                          FIACLIFORN.LJA_CODIGO = NLOJA_ESTOQUE AND 
                                          FIACLIFORN.CLF_CODIGO = (SELECT 
                                                                      MAX(CAPA_ORDEM_COMPRA.CLF_CODIGO)
                                                                   FROM 
                                                                      TABELA_ORDEM_COMPRA
                                                                      JOIN CAPA_ORDEM_COMPRA ON (
                                                                          TABELA_ORDEM_COMPRA.LJA_CODIGO = CAPA_ORDEM_COMPRA.LJA_CODIGO AND 
                                                                          TABELA_ORDEM_COMPRA.COC_NUMERO = CAPA_ORDEM_COMPRA.COC_NUMERO AND 
                                                                          CAPA_ORDEM_COMPRA.COC_STATUS = 'A')
                                                                      WHERE
                                                                          nLJA_CODIGO = TABELA_ORDEM_COMPRA.LJA_CODIGO_RED AND 
                                                                          nRED_PRODUTO_KEY = TABELA_ORDEM_COMPRA.RED_PRODUTO_KEY);
          
                                       SELECT
                                          SUM(NVL(TABELA_ORDEM_COMPRA.TOC_QUANTIDADE, 0))
                                       into
                                          nPED_NO_FORNECEDOR
                                       FROM
                                          TABELA_ORDEM_COMPRA
                                              JOIN CAPA_ORDEM_COMPRA ON (
                                                  CAPA_ORDEM_COMPRA.LJA_CODIGO = TABELA_ORDEM_COMPRA.LJA_CODIGO AND 
                                                  CAPA_ORDEM_COMPRA.COC_NUMERO = TABELA_ORDEM_COMPRA.COC_NUMERO)
                                       WHERE
                                          TABELA_ORDEM_COMPRA.LJA_CODIGO_RED = nLJA_CODIGO AND 
                                          TABELA_ORDEM_COMPRA.RED_PRODUTO_KEY = nRED_PRODUTO_KEY AND 
                                          CAPA_ORDEM_COMPRA.COC_STATUS IN ('A','P') AND 
                                          CAPA_ORDEM_COMPRA.clf_codigo     =  (SELECT 
                                                                                      MAX(CAPA.CLF_CODIGO)
                                                                                   FROM 
                                                                                      TABELA_ORDEM_COMPRA ITEM
                                                                                      JOIN CAPA_ORDEM_COMPRA CAPA ON (
                                                                                          ITEM.LJA_CODIGO = CAPA.LJA_CODIGO AND 
                                                                                          ITEM.COC_NUMERO = CAPA.COC_NUMERO AND 
                                                                                          CAPA.COC_STATUS = 'A')
                                                                                      WHERE
                                                                                          nLJA_CODIGO = ITEM.LJA_CODIGO_RED AND 
                                                                                          nRED_PRODUTO_KEY = ITEM.RED_PRODUTO_KEY);
                                       SELECT 
                                          min(FATCONDPAGTO.CON_DESCRICAO)
                                       into
                                          nPRAZO
                                       FROM 
                                          FATCONDPAGTO 
                                       WHERE 
                                          FATCONDPAGTO.CON_PGTO = (SELECT 
                                                                          min(CAPA_ORDEM_COMPRA.CON_PGTO)
                                                                      FROM 
                                                                          CAPA_ORDEM_COMPRA
                                                                      WHERE
                                                                          CAPA_ORDEM_COMPRA.COC_NUMERO = (SELECT 
                                                                                                              MAX(CAPA_ORDEM_COMPRA.COC_NUMERO)
                                                                                                           FROM 
                                                                                                              TABELA_ORDEM_COMPRA
                                                                                                              JOIN CAPA_ORDEM_COMPRA ON (
                                                                                                                  TABELA_ORDEM_COMPRA.LJA_CODIGO = CAPA_ORDEM_COMPRA.LJA_CODIGO AND 
                                                                                                                  TABELA_ORDEM_COMPRA.COC_NUMERO = CAPA_ORDEM_COMPRA.COC_NUMERO AND 
                                                                                                                  CAPA_ORDEM_COMPRA.COC_STATUS = 'A')
                                                                                                              WHERE
                                                                                                                  nLJA_CODIGO = TABELA_ORDEM_COMPRA.LJA_CODIGO_RED AND 
                                                                                                                  nRED_PRODUTO_KEY = TABELA_ORDEM_COMPRA.RED_PRODUTO_KEY));
          
                                       nSOMACONS30D := 0;                                                                                    
                                       DECLARE CURSOR CUR_02 IS                                                                                                       
                                          /*Calculo ficha técnica do campo CONS30D*/
                                          /*Encontra 1º nivel de todas as fichas tecnica da materia prima*/
                                       SELECT
                                          PROCAPAFICHATEC.RED_PRODUTO_KEY,
                                          SUM(FATDETALHETRANSFERENCIA.TFD_QUANT) AS "nQtdeTransferencia"
                                       FROM
                                          FATDETALHETRANSFERENCIA
                                          JOIN FATCPTRANSFERENCIA ON (
                                             FATCPTRANSFERENCIA.TRF_CODIGO = FATDETALHETRANSFERENCIA.TRF_CODIGO)
                                          JOIN PROCAPAFICHATEC ON (
                                              PROCAPAFICHATEC.LJA_CODIGO_PRO = FATDETALHETRANSFERENCIA.LJA_CODIGO AND
                                              PROCAPAFICHATEC.RED_PRODUTO_KEY = FATDETALHETRANSFERENCIA.RED_PRODUTO_KEY)
                                          JOIN PRODETFICHATEC ON (
                                              PRODETFICHATEC.CFT_CODIGO = PROCAPAFICHATEC.CFT_CODIGO)
                                          JOIN PROREDUZIDOPRODUTO ON (
                                              PROREDUZIDOPRODUTO.LJA_CODIGO = PRODETFICHATEC.LJA_CODIGO_MAT AND
                                              PROREDUZIDOPRODUTO.RED_PRODUTO_KEY = PRODETFICHATEC.RED_PRODUTO_MAT)
                                         LEFT JOIN PROPRODUTOS ON (
                                              PROPRODUTOS.LJA_CODIGO = PROREDUZIDOPRODUTO.LJA_CODIGO AND
                                              PROPRODUTOS.PRO_CODIGO = PROREDUZIDOPRODUTO.PRO_CODIGO
                                         )
                                      WHERE
                                          PROREDUZIDOPRODUTO.LJA_CODIGO      = nLJA_CODIGO AND
                                          PROREDUZIDOPRODUTO.RED_PRODUTO_KEY = nRED_PRODUTO_KEY AND
                                          FATCPTRANSFERENCIA.TPT_CODIGO = 197
                                      GROUP BY
                                          PROCAPAFICHATEC.RED_PRODUTO_KEY;
                                     BEGIN
                                      OPEN CUR_02;
                                          LOOP
                                              FETCH CUR_02 INTO nRED_PROD_KEY_FICHATEC, nQtdeTransferencia;  
                                                  EXIT WHEN CUR_02%NOTFOUND;
          
                                                  select 
                                                      CALCULO_CASCATAFICHATEC(nlja_codigo, nRED_PROD_KEY_FICHATEC, nRED_PRODUTO_KEY, nQtdeTransferencia) 
                                                  into 
                                                      nCONS30D 
                                                  from 
                                                      dual;
                                                  nSOMACONS30D := nSOMACONS30D + NVL(nCONS30D,0);
          
                                          END LOOP;
                                      CLOSE CUR_02;
                                     END;      
                                     nSOMANEC_CARTEIRA := 0;                                                                                                         
                                   DECLARE CURSOR CUR_02 IS                                                                                                       
                                      /*Calculo ficha técnica do campo NEC_CARTEIRA*/
                                      /*Encontra 1º nivel de todas as fichas tecnica da materia prima*/
                                      SELECT
                                          PROCAPAFICHATEC.red_produto_key,
                                          sum(FATTABPEDIDO.TPE_QUANTIDADE) as "QndeCascata"
                                      FROM
                                          FATTABPEDIDO
                                         JOIN FATCPPEDIDO ON (
                                             FATCPPEDIDO.LJA_CODIGO = FATTABPEDIDO.LJA_CODIGO AND
                                             FATCPPEDIDO.CPE_CODIGO = FATTABPEDIDO.CPE_CODIGO)
                                          JOIN PROCAPAFICHATEC ON (
                                              PROCAPAFICHATEC.LJA_CODIGO_PRO = FATTABPEDIDO.LJA_CODIGO AND
                                              PROCAPAFICHATEC.RED_PRODUTO_KEY = FATTABPEDIDO.RED_PRODUTO_KEY)
                                          JOIN PRODETFICHATEC ON (
                                              PRODETFICHATEC.CFT_CODIGO = PROCAPAFICHATEC.CFT_CODIGO)
                                          JOIN PROREDUZIDOPRODUTO ON (
                                              PROREDUZIDOPRODUTO.LJA_CODIGO = PRODETFICHATEC.LJA_CODIGO_MAT AND
                                              PROREDUZIDOPRODUTO.RED_PRODUTO_KEY = PRODETFICHATEC.RED_PRODUTO_MAT)
                                         LEFT JOIN PROPRODUTOS ON (
                                                PROPRODUTOS.LJA_CODIGO = PROREDUZIDOPRODUTO.LJA_CODIGO AND
                                              PROPRODUTOS.PRO_CODIGO = PROREDUZIDOPRODUTO.PRO_CODIGO
                                         )
                                      WHERE
                                          PROREDUZIDOPRODUTO.LJA_CODIGO      = nLJA_CODIGO AND
                                          PROREDUZIDOPRODUTO.RED_PRODUTO_KEY = nRED_PRODUTO_KEY AND
                                          FATCPPEDIDO.CPE_STATUS IN ('A','P')
                                      GROUP BY
                                          PROCAPAFICHATEC.red_produto_key;
                                     BEGIN
                                      OPEN CUR_02;
                                          LOOP
                                              FETCH CUR_02 INTO nRED_PROD_KEY_FICHATEC, nQtdeTransferencia;  
                                                  EXIT WHEN CUR_02%NOTFOUND;
          
                                                  select 
                                                      CALCULO_CASCATAFICHATEC(nlja_codigo, nRED_PROD_KEY_FICHATEC, nRED_PRODUTO_KEY, nQtdeTransferencia) 
                                                  into 
                                                      nNEC_CARTEIRA 
                                                  from 
                                                      dual;
          
                                                  nSOMANEC_CARTEIRA := nSOMANEC_CARTEIRA + NVL(nNEC_CARTEIRA,0);
          
                                          END LOOP;
                                      CLOSE CUR_02;
                                     END;
          
                                     /*Valor do estoque da matéria prima*/
                                    select 
                                         SUM((select 
                                            sum(EstoqueAPA.tab_quantidade) 
                                          from 
                                             fatestoque_produto EstoqueAPA 
                                           where 
                                             EstoqueAPA.lja_codigo      = fatestoque_produto.lja_codigo and 
                                             EstoqueAPA.red_produto_key = fatestoque_produto.red_produto_key and 
                                             EstoqueAPA.lja_codigo_est  = 1 and 
                                             EstoqueAPA.dep_codigo      = 1 
                                         ) + 
                                         (select 
                                             sum(EstoqueAPA.tab_quantidade) 
                                          from 
                                             fatestoque_produto EstoqueAPA 
                                             inner join prodeposito on ( 
                                                 prodeposito.lja_codigo = EstoqueAPA.lja_codigo_est and 
                                                 prodeposito.dep_codigo = EstoqueAPA.dep_codigo 
                                            ) 
                                           where 
                                             EstoqueAPA.lja_codigo      = fatestoque_produto.lja_codigo and 
                                             EstoqueAPA.red_produto_key = fatestoque_produto.red_produto_key and 
                                             prodeposito.lja_codigo     = 1 and 
                                             prodeposito.dep_tipo       = 'P' 
                                         ))
                                     INTO
                                        nVALOR_ESTOQUE
                                     from 
                                        fatestoque_produto 
                                     where 
                                        fatestoque_produto.lja_codigo      = nLJA_CODIGO and 
                                        fatestoque_produto.red_produto_key = nRED_PRODUTO_KEY;
          
                                     /*Quantidade Pedido*/
                                     SELECT 
                                          SUM(FATTABPEDIDO.TPE_QUANTIDADE)
                                     INTO
                                         nNQTDE_PEDIDO
                                      FROM 
                                          FATTABPEDIDO 
                                          INNER JOIN FATCPPEDIDO ON( 
                                              FATCPPEDIDO.CPE_CODIGO = FATTABPEDIDO.CPE_CODIGO AND 
                                              FATCPPEDIDO.LJA_CODIGO = FATTABPEDIDO.LJA_CODIGO) 
                                      WHERE 
                                          FATTABPEDIDO.LJA_CODIGO      = nLJA_CODIGO AND 
                                          FATTABPEDIDO.RED_PRODUTO_KEY = nRED_PRODUTO_KEY AND 
                                          FATCPPEDIDO.CPE_STATUS IN ('A','P');
          
                                     /*CNE_PROGRAMA*/
                                     nNEC_PROGRAMA := (NVALOR_VARIAVEL_PRO_DIARIA *
                                                       nCONS30D -
                                                       NVL(nVALOR_ESTOQUE,0) +
                                                       NVL(nNQTDE_PEDIDO,0));      
          
                                     IF nNEC_PROGRAMA < 0 THEN
                                        nNEC_PROGRAMA := 0;
                                     END IF;                         
          
                                     /*Receber Carteira*/
                                     nREC_CARTEIRA := (nNEC_CARTEIRA - nEst_Insp_Emp);  
                                     IF nREC_CARTEIRA < 0 THEN
                                        nREC_CARTEIRA := 0;
                                     END IF;
          
                                     /*Receber Programa*/
                                     nREC_PROGRAMA := (nNEC_PROGRAMA - nEst_Insp_Emp);  
                                     IF nREC_PROGRAMA  0 THEN
                                        nPedir_para_carteira := 0;
                                     END IF;
          
                                     /*Pedir para Programa*/
                                     nPedir_Prog := (nEst_Insp_Emp + nPed_No_Fornecedor) - nNEC_PROGRAMA;  
                                     IF nPedir_Prog > 0 THEN
                                        nPedir_Prog := 0;
                                     END IF;
          
                                     /*Pedir*/
                                     IF nPedir_Prog < 0 THEN
                                        nPedir := nPedir_Prog * -1;
                                     ELSE
                                        nPedir := 0;
                                     END IF;
          
                                     /*Excesso Fornecedor*/
                                     nEXCESSO_FORNECEDOR := (nPed_No_Fornecedor - nREC_PROGRAMA);  
                                     IF nEXCESSO_FORNECEDOR < 0 THEN
                                        nEXCESSO_FORNECEDOR := 0;
                                     END IF;
          
                                     /*Dias em Excesso*/
                                     IF nCONS30D = 0 THEN
                                        nColunaD := 0;
                                     ELSE
                                        nColunaD := nEXCESSO_FORNECEDOR / (nCONS30D / 30);
                                        IF nCOLUNAD < 0 THEN
                                           nCOLUNAD := 0;
                                        END IF;
                                     END IF;
          
                                     /*Valor Excesso*/
                                     nVR_EXC := (nEXCESSO_FORNECEDOR * nTOC_PRECO);                      
                                     nSEM_DE_FATO  := '';
                                     nSEM_DE_FATO2 := '';
          
                                     INSERT INTO TEMP_COMPRAS VALUES (nPRO_CODIGO,nLJA_CODIGO,nRED_PRODUTO_KEY,nCLF_CODIGO,nCLF_RAZNOM,nPRO_MASKCOD,nPRO_DESCRICAO,nPRO_UNIDADE,nACA_CODIGO,nPAD_DESCRICAO,nSOMACONS30D,nEST_INSP_EMP,nPED_NO_FORNECEDOR,nPEDIR_PARA_CARTEIRA,nPEDIR_PROG,nEXCESSO_FORNECEDOR,nDR,nPRO_LOTE_REPOSICAO,nPRO_PTO_REPOSICAO,nPEDIR,nTOC_PRECO,nLOTE,nVLR_LOTE,nCOLUNAD,nVR_EXC,nSOMANEC_CARTEIRA,nNEC_PROGRAMA,nREC_CARTEIRA,nREC_PROGRAMA,nNUMERO_OC,nSEM_DE_FATO,nSEM_DE_FATO2,nPRAZO,nPRO_ESTMINIMO);
          
                          END LOOP;
          

          END;
          /

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.
        plugins premium WordPress