obs:(a versao do oracle é 8i)
segue o script:
--DECLARAÇÃO
TYPE t_tab_NUMBER IS TABLE OF number INDEX BY binary_integer;
TYPE t_tab_DATE IS TABLE OF date INDEX BY binary_integer;
TYPE t_tab_VARCHAR2 IS TABLE OF varchar2 (100) INDEX BY binary_integer;
TYPE t_bc_a IS TABLE OF rowid INDEX BY binary_integer; -- Type do rowid passado pelo leo
-- Variaveis Simples
vTOTALCUSTO number;
vTOTALVENDA number;
vQTDETOTAL number;
vDATAVENDA date;
-- Vetores para uso na tabela de memória
v_tab_rowid t_bc_a;
v_tab_TOTALCUSTO t_tab_NUMBER;
v_tab_TOTALVENDA t_tab_NUMBER;
v_tab_QTDETOTAL t_tab_NUMBER;
v_tab_DATAVENDA t_tab_DATE;
-- Variaveis de controle
v_tab_IND NUMBER := 1; -- Indice
v_tam_IND NUMBER := 1000; -- De qtos em qtos ele vai commitar
v_tam_TOT NUMBER := 0; -- Tamanho inicial do vetor de crescimento
-- Não copiei o codigo todo, mas quando o debugger chega nesse trecho os valores estao sendo corretamente atribuidos.
Select
vTOTALCUSTO,
vTOTALVENDA,
vQTDETOTAL,
vDATAVENDA,
TAB_IMP.ROWID
into
v_tab_TOTALCUSTO(v_tab_IND),
v_tab_TOTALVENDA(v_tab_IND),
v_tab_QTDETOTAL(v_tab_IND),
v_tab_DATAVENDA(v_tab_IND),
v_tab_rowid(v_tab_IND)
from
dual;
if v_tab_IND = v_tam_IND then -- quando atingir o valor de commit.
FORALL v_ind in 1..v_tam_IND -- Update não funciona.
update TABELA01@rjd6t a set
a.CUSTOVENDAULT12MESES = v_tab_TOTALCUSTO(v_ind),
a.VALORVENDAULT12MESES = v_tab_TOTALVENDA(v_ind),
a.QTDEVENDAULT12MESES = v_tab_QTDETOTAL(v_ind),
a.DATAULTIMAVENDA = v_tab_DATAVENDA(v_ind)
where
a.rowid = v_tab_rowid(v_ind);
v_tab_IND := 1; -- Contador volta no primeiro indice
v_tam_TOT := v_tam_TOT + v_tam_IND; -- Registra andamento da gravação
commit;
else
v_tab_IND := v_tab_IND + 1 ; -- Vai ao prox. indice
end if;
end;
alguém pode me ajudar? Tnksss.