Usando um valor padrão na entrada nula no Sybase
-
27-10-2019 - |
Pergunta
Bom dia,
Eu tenho uma pergunta sobre valores padrão e valores NULL no Sybase ASE 12. Para encurtar a história: Eu herdei um banco de dados Sybase muito antigo, bem como o front-end do PowerBuilder que fica em cima dele. Uma das tabelas em questão contém várias colunas que possuem valores padrão, bem como a restrição não nula. Portanto, sempre que nenhum valor (nota: não é um valor NULL) é fornecido, o PowerBuilder cria a instrução de inserção / atualização apropriada e simplesmente não passa um valor para esses campos vazios, que são então automaticamente atribuídos ao valor padrão pelo banco de dados. Molho.
Agora, o problema: foi decidido adicionar auditoria a todo o aplicativo via front end (uma má ideia, eu sei, mas não escolha minha). Uma função foi escrita para abstrair o processo de auditoria, mas o problema surge do fato de que ela não vê nenhuma entrada do usuário como um valor NULL e gera uma instrução de inserção na tabela de auditoria (também definida com a restrição não nula), fornecendo o NULL literal para essas colunas vazias. Sybase então vê o NULL literal e, como todos sabem, trata o NULL como um valor e não como 'nenhuma entrada'.
Portanto, a questão: é possível definir como padrão uma entrada NULL para os valores padrão do lado do banco de dados? Considerei os gatilhos, mas espero ter sorte e que haja alguma forma de construção no nível da tabela que eu possa usar.
Obrigado pelo seu tempo e consideração.
Referências:
Um bom exemplo do problema em questão
http://www.sybaseteam .com / null-not-nothing-diferença-entre-null-nothing-sybase-t-390.html
Consulte a tabela 7-1, na metade da página.
http : //manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@ebt-link; pt= 20741? target=% 25N% 15_19279_START_RESTART_N% 25
Solução
Acho que você precisa tornar sua função de auditoria mais inteligente.Ele deve registrar apenas as colunas alteradas pelo usuário.Isso é fácil de determinar com getitemstatus
.Você pode percorrer as colunas usando a forma de getitemstatus
que leva um número de coluna inteiro.