Saida anormal do form - limpar dados temporarios

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Marcos Aguiar
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 08 Mai 2008 1:54 pm
Localização: rio de janeiro

Tenho um FORM que no trigger key-exit deleta os dados de uma tabela que é preenchida para auxiliar na geração de um relatório (não é global). Essa tabela utiliza o ID_SESSION para identificar os dados a serem manipulados. Ocorre que quando por um motivo qualquer o relatório demora, o usuário aborta o processo usando o famoso CTRL+ALT+DEL, o trigger não é executado e os dados permanecem na tabela.
Como posso fazer para executar a limpeza da tabela quando o processo é terminado de forma anormal? Agradeço desde já.
Abs
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Existem várias formas de se fazer isso.
Acho que a melhor delas, é fazer JOIN com a sessão.
Se você reparar, o SESSIONID está listado no campo AUDSID da V$SESSION.
Então: caso você identifique na sua tabela que existe algum SESSIONID que não está listado na V$SESSION, certamente esse é algum lixo que ficou de um ctrl-alt-del.

Veja: meu session id é 66600371. Ele está presente na tabela de sessões.

Selecionar tudo

SQL> select sys_context ('USERENV', 'SESSIONID') from dual;

SYS_CONTEXT('USERENV','SESSIONID')
--------------------------------------------------------------------------------
66600371

SQL> 
SQL> select audsid, program from v$session 
  2  where audsid=66600371
  3  /

    AUDSID PROGRAM
---------- ------------------------------------------------
  66600371 sqlplusw.exe

SQL> 
Uma outra forma, um pouco mais TOSCA é colocar um campo com a data que o registro foi incluido. Dai basta você apagar tudo que é velho, por exmeplo, tudo que tem mais de 15 dias. (certamente é erro).

REFERENCIA: http://glufke.net/oracle/viewtopic.php?t=35

:-o
Marcos Aguiar
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 08 Mai 2008 1:54 pm
Localização: rio de janeiro

Se entendi, isso deve ser feito a qualquer tempo, ou até mesmo pode-se programar um procedimento de limpeza noturna. Eu queria saber se tem como ser feito no ato, ou seja, no momento em que o usuário pressiona o CTRL+ALT+DEL.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Não, no momento que o sujeito dá o CTRL-ALT-DEL, o sistema vai simplesmente abortar. Não existe "trigger" que dispara nessa situação.

Isso você pode fazer na hora que o usuário sai do programa SEM abortar.
TIPO:
* Ele apaga os dados da sua própria sessão
* E aproveita pra apagar todos linhas cujo SESSION ID não se encontra mais na V$SESSION. (lembrando, isso no caso de outras sessões não estarem usando essa informação. Como você disse que no fim ele sempre apaga, dá pra fazer dessa forma).

Talvez seja uma boa idéia neste caso transformar a tabela numa GLOBAL TEMPORARY TABLE, além de ser extremamente rápidas, você nunca precisa se preocupar em apagar as informações no fim. Leia sobre isso!

:D
RodrigoValentim
Moderador
Moderador
Mensagens: 367
Registrado em: Ter, 25 Mar 2008 3:41 pm
Localização: Salvador - BA
Rodrigo Valentim
Analista de Sistemas
Oracle Developer

Campanha: Faça uma pesquisa antes de perguntar!!!

Bom, eu tenho uma rotina semelhante, porém, faço tudo no reports.

Para conseguir um detgerminado valor, preciso consolidar as informações, gravar numa tabela e dai puxar no reports, então uso a before parameter, populo a tabela (sem commit), uso a query para puxar as informações e pronto... quando usuário fecha a sessão, os dados vão embora.

é mais uma alternativa
Marcos Aguiar
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 08 Mai 2008 1:54 pm
Localização: rio de janeiro

Valeu pessoal.

Acho que já tenho boas sugestões e vou avaliar qual a mais adequada.

Obrigado e um abraço a todos.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes