aqui o código
begin
declare
L_CDUSUA CHAR(20) := LTRIM('mrg');
L_CDEMP CHAR(2) := '01';
L_CDFIL CHAR(4) := '0002';
L_mês CHAR(2) := '07';
L_ANO CHAR(4) := '2004';
-- CRIA UM ARRAY COM ÍNDICES PARA TRABALHAR COM OS 7 VALORES POSSÍVEIS NAS DATAS NECESSÁRIAS
TYPE CAMPOSTAB IS TABLE OF VARCHAR2(50) index by Binary_Integer;
P1 CAMPOSTAB;
J NUMBER(1) := 1;
-- ------------------------------Valores representativos dos Índices do Array
--******** 1 = Volumes(Cab)
--******** 2 = Volumes Kg
--******** 3 = Peso Médio
--******** 4 = Faturamento R$
--******** 5 = Faturamento Cab
--******** 6 = Quilos Equivalentes
--******** 7 = Preço Médio
-- --------------------------------------------------------------------------
EXCEPT_ERR EXCEPTION;
BEGIN
P1(1) := 'CPDITS.QTPRO';
P1(2) := 'CPDITS.PSPRO';
P1(3) := 'CPDITS.VLUNITPRO';
-- LOOP PARA PASSAR POR TODOS OS P1 ARMAZENADOS NO ARRAY
WHILE J <= 3 LOOP
-- Loop para valores no mês corrente
FOR CARGA IN(
SELECT
-- SELECIONA O CAMPO PASSADO NO ARRAY E O IDENTIFICADOR QUE É IGUAL AO ÍNDICE DO ARRAY
(ADFSTPTIT.CDSTPTIT) CDSTPTIT, (MIN(ADFSTPTIT.DESTPTIT)) DESTPTIT,
(SUM(P1(J))) VLMES, (MAX(J)) IDTPINF
FROM
CADPRO,
CPDITS,
CPDNFS,
CPDVTS,
ADFSTPTIT
WHERE
CADPRO.CDPRO = CPDITS.CDPRO AND
CPDITS.CDEMP = CPDNFS.CDEMP AND
CPDITS.CDFIL = CPDNFS.CDFIL AND
CPDITS.NUDOC = CPDNFS.NUDOC AND
CPDITS.CDSERIE = CPDNFS.CDSERIE AND
CPDITS.CDSUBSERIE = CPDNFS.CDSUBSERIE AND
CPDNFS.CDEMP = CPDVTS.CDEMP AND
CPDNFS.CDFIL = CPDVTS.CDFIL AND
CPDNFS.NUDOC = CPDVTS.NUDOC AND
CPDNFS.CDSERIE = CPDVTS.CDSERIE AND
CPDNFS.CDSUBSERIE = CPDVTS.CDSUBSERIE AND
CPDVTS.CDEMP = ADFSTPTIT.CDEMP AND
CPDVTS.CDFIL = ADFSTPTIT.CDFIL AND
CPDVTS.CDTPTIT = ADFSTPTIT.CDTPTIT AND
CPDVTS.CDSTPTIT = ADFSTPTIT.CDSTPTIT AND
CADPRO.CDPRO IN (SELECT CDPRO FROM CADPRO WHERE TPESTRUT = '11' AND CDESTRUT LIKE '1%') AND
CPDNFS.DTEMI = TO_DATE(L_mês||'/'||L_ANO,'MM/YYYY') AND
ADFSTPTIT.CDEMP = L_CDEMP AND
ADFSTPTIT.CDFIL = L_CDFIL
GROUP BY ADFSTPTIT.CDSTPTIT) LOOP
-- INSERE RESULTADO DA VIEW EXPLÍCITA NA TABELA MTRZ221
INSERT INTO MTRZ221 (CDSTPTIT, DESTPTIT, IDTPINF, VLMES, CDUSUA, CDEMP, CDFIL)
VALUES(CARGA.CDSTPTIT, CARGA.DESTPTIT, CARGA.IDTPINF, CARGA.VLMES, L_CDUSUA, L_CDEMP, L_CDFIL);
END LOOP;
COMMIT;
commit;
EXCEPTION
when others then
rollback;
raise;
END;
END;
agradeço desde já....abraços