FAQ Procura Membros Registre-se Perfil MP's Login/Out
Deletando valor ID bloco - zerar table of varchar

 
Novo Tópico   Responder Mensagem    glufke.net - Índice do Fórum -> Forms
Mensagem Autor
Enviada: Sex, 03 Out 2008 4:02 pm     Assunto: Deletando valor ID bloco - zerar table of varchar

Boa tarde pessoal!!! sou novo aqui no fórum, e normalmente tem me ajudado muito, porém estou com um problema e não estou conseguindo resolver....!

é 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
Código:


PACKAGE Lista IS
   TYPE lista is table of varchar2(20) index by binary_integer;
    lista_item lista;
END;




2º essa parte fica no when validated item do 2º bloco
Código:

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;




_________________
--
Victor Hugo
victorpsl
Rank: Programador Júnior
Rank: Programador Júnior


Registrado em: Seg, 19 de Mai de 2008
Mensagens: 20
Cidade - UF: SP


Enviada: Sex, 10 Out 2008 9:07 am    

Você pode "LIMPAR" o seu table of varchar da seguinte forma:

Código:
-- delete Pl/SQL table records
declare
  type myTextTableType is table of varchar2(200) index by binary_integer;

  l_tabela_texto      myTextTableType;
  l_tabela_vazia      myTextTableType;
begin
  l_tabela_texto(10) := 'Um valor';
  l_tabela_texto(20) := 'outro valor';
  l_tabela_texto(30) := 'mais um valor';

  l_tabela_texto := l_tabela_vazia;
  dbms_output.put  ('Uma vez que setamos nossa tabela VAZIA p/ uma TABELA POPULADA, ela se torna vazia.');
  dbms_output.put_line('Quantidade: ' || l_tabela_texto.count || ' varchars');

end;
/



Agora, vamos executar:
Código:
SQL> set serveroutput on
SQL>
SQL> -- delete Pl/SQL table records
SQL> declare
  2    type myTextTableType is table of varchar2(200) index by binary_integer;
  3 
  4    l_tabela_texto      myTextTableType;
  5    l_tabela_vazia    myTextTableType;
  6  begin
  7    l_tabela_texto(10) := 'Um valor';
  8    l_tabela_texto(20) := 'outro valor';
  9    l_tabela_texto(30) := 'mais um valor';
 10 
 11    l_tabela_texto := l_tabela_vazia;
 12    dbms_output.put  ('Uma vez que setamos nossa tabela VAZIA p/ uma TABELA POPULADA, ela se torn
a vazia.');
 13    dbms_output.put_line('Quantidade: ' || l_tabela_texto.count || ' varchars');
 14 
 15  end;
 16  /
Uma vez que setamos nossa tabela VAZIA p/ uma TABELA POPULADA, ela se torna
vazia.Quantidade: 0 varchars

PL/SQL procedure successfully completed.

SQL>



Você pode colocar MAIS UMA variável na sua package
Código:
PACKAGE Lista IS
   TYPE lista is table of varchar2(20) index by binary_integer;
    lista_item  lista;
    lista_vazia lista;
END;


Daí basta zerar a lista onde você quiser Very Happy
Surprised
_________________
Thomas F. G.
Campanha: Faça uma pesquisa antes de perguntar!!!
dr_gori
Moderador
Moderador


Registrado em: Seg, 3 de Mai de 2004
Mensagens: 3220
Cidade - UF: Porto Alegre - RS


Enviada: Sex, 13 Fev 2009 11:38 am     Assunto: Obrigado!

Faz tempo que não tinha visto esta resposta. hehe.. Obrigado! Very Happy
_________________
--
Victor Hugo
victorpsl
Rank: Programador Júnior
Rank: Programador Júnior


Registrado em: Seg, 19 de Mai de 2008
Mensagens: 20
Cidade - UF: SP


Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    glufke.net - Índice do Fórum -> Forms Todos os horários são GMT - 3 Hours
Página 1 de 1

 
 
. .