Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que o Oracle 9i trata uma string vazia como NULL?


Acredito que a resposta é que a Oracle é muito, muito antiga.

Antigamente, antes de haver um padrão SQL, a Oracle tomou a decisão de design que esvaziava as strings em VARCHAR /VARCHAR2 colunas eram NULL e que havia apenas um sentido de NULL (há teóricos relacionais que diferenciam entre dados que nunca foram solicitados, dados em que a resposta existe, mas não é conhecida pelo usuário, dados em que não há resposta etc. que constituem algum sentido de NULL ).

Quando o padrão SQL surgiu e concordou que NULL e a string vazia eram entidades distintas, já existiam usuários Oracle que tinham código que assumia que as duas eram equivalentes. Assim, a Oracle ficou basicamente com as opções de quebrar o código existente, violar o padrão SQL ou introduzir algum tipo de parâmetro de inicialização que alteraria a funcionalidade de um número potencialmente grande de consultas. A violação do padrão SQL (IMHO) foi a menos disruptiva dessas três opções.

A Oracle deixou em aberto a possibilidade de que o VARCHAR tipo de dados mudaria em uma versão futura para aderir ao padrão SQL (e é por isso que todos usam VARCHAR2 no Oracle desde que o comportamento desse tipo de dados permaneça o mesmo daqui para frente).