Árvore de páginas

A partir do DBAccess Build <X>, será suportado um novo tipo de tabela temporária. As tabelas temporárias tradicionais, criadas através do DBAccess como tabelas temporárias no banco de dados, partem das seguintes premissas:

  • Apenas a conexão que criou a tabela pode manipular a tabela. 
  • A tabela possui controle de R_E_C_N_O_ automático pelo SGDB
  • É possível fazer uma Query com JOIN entre uma tabela de dados permanente e uma tabela temporaria. 
  • E possível manipular a tabela com acessso ISAM emulado e por instruções diretas via TCSQLEXEC 
  • Uma tabela temporária tradicional deve ser aberta em modo exclusivo, pois somente o processo que a criou tem acesso aos seus dados. 
  • A aplicação AdvPL define um identificador dinamico (um nome virtual) para a tabela. 
  • A aplicação AdvPL usa o nome virtual para abrir a tabela para manipulação de dados via ISAM emulado. 
  • O nome real da tabela no banco de dados é definido pelo DBACcesss
  • Para fazer queries ou instruções SQL diretas na tabela temporária, o nome real da tabela deve ser solicitado ao DBAccess após a criação da tabela. 
  • Não há garantia de transacionamento em tabelas temporárias. 
  • A aplicação AdvPL pode (e deve) apagar uma tabela temporária que ela criou, desde que ela não esteja aberta e/ou em uso.
  • Se a aplicação AdvPL nao apagar a tabela, o DBAccess apaga a tabela quando o processo AdvPL terminar/desconectar do DBAccess. 
  • Mesmo que ocorra alguma falha no processo de limpeza, por ser uma tabela temporária, o próprio SGDB se encarrega de limpar a tabela e seus dados quando nenhuma conexão referenciar a tabela. 

Como existem diversos processos que podem justamente precisar de uma tabela para uso temporário, porém os dados dessa tabela precisam ser compartilhados com outros processos e/ou conexões, é possível criar uma tabela temporária compartilhada, que possui todos os recursos e caracteristicas da tabela temporária tradicional, com as seguintes diferenças:

  • A tabela pode ser manipulada – inserir, remover, alterar registros – por mais de um processo ou conexão. 
  • A aplicação AdvPL usa um identificador fixo para criar uma tabela temporária compartilhada. 
  • É necessário solicitar ao DBACcess o nome real da tabela criada no banco de dados, para ser possível abrí-la em modo ISAM emulado e/ou executar queries e instrucões SQL na tabela. 
  • A aplicação AdvPL consegue apagar a tabela criada, desde que nenhuma conexão esteja usando a tabela. 
  • Mesmo que a aplicação AdvPL não apague a tabela explicitamente, ao ser finalizada a ultima conexão que abriu / usou a tabela temporária compartilhada, o DBACcess envia ao SGDB a instrução de limpeza (drop) da tabela. 
  • Mesmo que, por qualquer razão ocorra uma falha ao enviar a instrução de limpeza, ou ela não seja enviada, o DBACcess possui um mecanismo de limpeza automático de tabelas temporárias compartilhadas sem uso, executado periodicamente em uma conexão separada.  
  • Uma tabela temporária compartilhada deve ser aberta em modo compartilhado, mas ela pode ser aberta em modo exclusivo de acordo com a necessidade da rotina, desde que nenhum outro processo esteja usando a tabela temporaria compartilhada em modo de abertura compartilhado. 

Com isso, um determinado processo em Grid ou Multi-Thread pode criar uma tabela para fins temporários , que pode ser manipulada e consultada pelos demais processos e conexões envolvidas, desde que elas recebam como parametro o nome da tabela em questão, e ao final de todos os processos envolvidos que usam essa tabela, existem mecanismos automáticos para eliminar a tabela do banco de dados quando ela não estiver mais sendo usada. Todas as demais caracteristicas são comuns entre as tabelas temporárias compartilhadas:

  • A tabela possui controle de R_E_C_N_O_ automático pelo SGDB
  • É possível fazer uma Query com JOIN entre uma tabela de dados permanente e uma tabela temporaria tradicional e/ou temporaria de uso compartilhado. 
  • E possível manipular a tabela com acessso ISAM emulado e por instruções diretas via TCSQLEXEC 
  • O nome real da tabela no banco de dados é definido pelo DBACcesss
  • Não há garantia de transacionamento em tabelas temporárias tradicionais e/ou compartilhadas. 



  • Sem rótulos