Árvore de páginas

OcorrênciaNecessidade de criação de um campo interno para tabelas do DBAccess, não visíveis na estrutura de acesso pelo AdvPL, que registre um datetime e/ou timestamp com o momento que o registro foi inserido na tabela. 
ImplementaçãoImplementado o campo de controle "I_N_S_D_T_", para os bancos MSSQL, ORACLE e POSTGRES, atualizado diretamente pelo SGDB no momento da inclusão do registro
Informações adicionais
  • O tipo do campo criado na tabela é DATETIME (para MSSQL) e TIMESTAMP (para Postgres e Oracle)
  • O campo é preenchido na inclusão do registro no banco de dados, com data e hora atuais no fuso horário UTC, obtido de forma nativa pelo Banco de Dados. 
  • A inclusão deste campo nas novas tabelas a serem criadas, e a inclusão deste campo sob demanda nas tabelas já existentes em um determinado SGDB também podem ser feitas mediante a chamada da nova função TCConfig(). Para maiores detalhes consulte a documentação da função TCConfig.
  • Uma tabela criada com a coluna de controle I_N_S_D_T_ tem o valor da coluna preenchido no momento da inserção do registro através da constraint default do campo. 
  • Acrescentar a coluna I_N_S_D_T_ em uma tabela já existente não preenche o conteúdo dos campos para os dados já existentes na tabela – os registros já existentes permanecem com o valor NULL. 
  • O DBAccess pode ser configurado para criar a coluna de controle automaticamente nas novas tabelas, mediante a configuração UseRowInsDT=1. Para maiores detalhes, consulte a documentação: DBAccess - Seção [Environment], chave UseRowInsDt.
  • A coluna I_N_S_D_T_ não é criada em tabelas temporárias. 
  • O uso ou implementação da coluna I_N_S_D_T_ é independente da implementação da coluna S_T_A_M_P_ , e ambas podem ser utilizadas separadamente ou em conjunto. 

A coluna de controle I_N_S_D_T_ somente pode ser consultada mediante uma Query. Quando uma coluna do tipo datetime e;ou timestamp é colocada diretamente em uma Query, o DBAccess trata essa informação como um campo do tipo "D" (Data) do AdvPL, sendo retornada somente a data do evento. sem as informações do horário armazenado na coluna. Para recuperar o campo de controle S_T_A_M_P_ e recuperar a informação completa ( data e horário ), por exemplo no formato yyyy-mm-dd hh:MM:ss.mmm ( Ano com 4 dígitos, mês com 2 dígitos, dia com 2 dígitos, e horário completo (24h) com precisão de milissegundos, deve ser feito um CAST específico para retornar a informação como "C" Caractere no AdvPL, para cada banco de dados, vide exemplos abaixo:


MSSQL : convert(varchar(23), I_N_S_D_T_ , 21 ) 

POSTGRES : cast ( to_char(i_n_s_d_t_,'YYYY-MM-DD HH:MI:SS.MS') 
ORACLE : cast ( to_char(i_n_s_d_t_,'YYYY-MM-DD HH24:MI:SS.FF')