é o seguinte!
No form existem 2 blocos onde, no 1º eu escolho 1 item e no 2º bloco posso escolher vários itens que fazem parte do item escolhido no 1º bloco.
Criei uma package Spec que apenas é declarado uma variável do tipo "binary_integer" , e implementei em uma trigger no campo "when validated item" para que pegasse o valor de cada item e fosse somando, de uma forma que caso o usuário coloque 2 itens iguais, aparece uma mensagem dizendo que a pessoa já escolheu o item.
Até aqui, beleza!!! ... um erro q esta ocorrendo no meu caso é quando:
deleto uma linha no 2º bloco, aperto commit, e vou para o bloco de cima. Ao mudar de item eu teria que zerar essa lista, pois não está acontecendo, então caso eu mude e tento inserir por exemplo o mesmo item q deletei o registro anterior, n consigo, pois ele está salvo na memória da lista.
Eu qria saber como posso estar fazendo para zerar essa lista quando o bloco de cima for alterado.
Se não expliquei direito, por favor pergunte o que n entendeu.
Obrigado!!!
segue um ex de como está o cod.
1º a package
PACKAGE Lista IS
TYPE lista is table of varchar2(20) index by binary_integer;
lista_item lista;
END;
Declare
cur_blk VARCHAR2(40) := :System.Cursor_Block;
cur_rec NUMBER;
bk_id Block;
begin
bk_id := Find_Block(cur_blk);
cur_rec := Get_Block_Property( bk_id, CURRENT_RECORD);
if(cur_rec > 1 ) then
cont := 1;
loop
if(lista.lista_item(cont-1) = :itco_id_comp) then
message('Já existe este item na lista. Por favor escolha outro.');
message('Já existe este item na lista. Por favor escolha outro.');
raise form_trigger_failure;
end if;
cont := cont + 1;
exit when cont = cur_rec;
end loop;
--message('valor:'||cur_rec);
--message('valor:'||cur_rec);
end if;
lista.lista_item(cur_rec-1) := :itco_id_comp;
exception
when NO_DATA_FOUND then
Message('Item não localizado.');
Message('Item não localizado.');
Message(lista.lista_item(0));
Message(lista.lista_item(0));
raise form_trigger_failure;
end;
end;