|
|
| 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

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
_________________ Thomas F. G.
Campanha: Faça uma pesquisa antes de perguntar!!!
|
|
dr_gori 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!
_________________ --
Victor Hugo
|
|
victorpsl Rank: Programador Júnior

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