Olá,
Você precisa entender sua necessidade, pois cada situação pode levar a uma correção diferente ou refatoração diferente.
Se você tem uma tabela sendo criada com DBCreate
via CTREE ou TOPCONN, ela é apagada? Ou é uma tabela que sempre deve existir, se for uma tabela que sempre deve existir, talvez cadastrá-la no SX2, SX3, SIX via Configurador seja sua melhor opção.
É uma tabela temporária? Você utiliza ela para um pequeno processamento e depois exclui? A recomendação é utilizar a classe FWTemoraryTable
, que vai criar uma tabela temporária no banco de dados, permitindo acessá-la via workarea, assim como uma tabela CTREE, mas também permitindo acessá-la via query, o que abre um leque de possibilidades, como fazer uma query, um join, popular ela via insert into etc.
É uma tabela temporária, mas que você utiliza em um processamento multi-thread? Aí temos uma outra classe de tabela temprária, a totvs.framework.database.temporary.SharedTable
, ela herda de FWTemporaryTable e tem um comportamento muito semelhante, porém ela tem uma visibilidade entre todas as threads, ela deve ser utilizada exatamente para situação que por mais que a tabela é temporária, outro processos devem enxergar a mesma, essa é uma melhoria mais recente, logo vai exigir DBAccess, DBAPI e Lib atualizados.
Documentações:
https://tdn.totvs.com.br/display/public/framework/FWTemporaryTable
https://tdn.totvs.com.br/display/public/framework/totvs.framework.database.temporary.SharedTable
https://medium.com/totvsdevelopers/insert-into-select-populando-tabela-tempor%C3%A1ria-1b3e1d1c93f
https://medium.com/totvsdevelopers/protheus-tabela-tempor%C3%A1ria-b2e955f43be4