Sempre me perguntei por que o tipo de dados VARCHAR2 era limitado a tão poucos caracteres. Para a maioria dos atributos, você não precisa de mais de 2.000 bytes. Lembro-me de quando a Oracle aumentou o limite de 2.000 bytes para 4.000. Mas o SQL Server 2008R2 permite que você use 8.000. Estamos falando de dados de caracteres e o limite de 2.000 ou 4.000 bytes me pareceu meio arbitrário. Agora no Oracle 12c, você pode usar VARCHAR2(32767) para um máximo de 32 KB. Mas antes de poder usar esse novo recurso, você precisa trabalhar um pouco. Fora da caixa, você receberá um erro.
SQL> create table test_tab (val varchar2(32000)); create table test_tab (val varchar2(32000)) * ERROR at line 1: ORA-00910: specified length too long for its datatype
O Oracle 12c inclui um novo parâmetro, MAX_STRING_SIZE, que controla o tamanho do seu tipo de dados VARCHAR2. Este parâmetro pode ser definido como PADRÃO ou ESTENDIDO. O padrão é STANDARD que limita VARCHAR2 a 4000 bytes. Alterar este parâmetro para padrão para ESTENDIDO é uma viagem de ida. Você não pode reverter. Para fazer a alteração, você precisa INICIAR UPGRADE a instância, modificar o parâmetro e executar um script.
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup upgrade ORACLE instance started. Total System Global Area 1043886080 bytes Fixed Size 2296280 bytes Variable Size 654313000 bytes Database Buffers 381681664 bytes Redo Buffers 5595136 bytes Database mounted. Database opened. SQL> alter system set max_string_size=EXTENDED scope=both; System altered. SQL> @?/rdbms/admin/utl32k.sql
Isso pode demorar um pouco para ser executado. Uma vez feito, devolva a instância para abrir normalmente.
Agora posso criar uma tabela com esse tipo de dados maior.
SQL> create table test_tab (val varchar2(32000)); Table created.