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

12c VARCHAR2(32767)


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.