sql >> Base de Datos >  >> RDS >> Oracle

12c VARCHAR2(32767)

Siempre me he preguntado por qué el tipo de datos VARCHAR2 estaba limitado a tan pocos caracteres. Para la mayoría de los atributos, no necesita más de 2000 bytes. Recuerdo cuando Oracle aumentó el límite de 2000 bytes a 4000. Pero SQL Server 2008R2 le permite usar 8000. Estamos hablando de datos de caracteres y el límite de 2000 o 4000 bytes me pareció algo arbitrario. Ahora en Oracle 12c, puede usar VARCHAR2 (32767) para un máximo de 32 KB. Pero antes de que pueda usar esta nueva función, debe trabajar un poco. Fuera de la caja, obtendrá un error.

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

Oracle 12c incluye un nuevo parámetro, MAX_STRING_SIZE, que controla qué tan grande puede ser su tipo de datos VARCHAR2. Este parámetro se puede establecer en ESTÁNDAR o EXTENDIDO. El valor predeterminado es ESTÁNDAR, que limita VARCHAR2 a 4000 bytes. Cambiar este parámetro de estándar a EXTENDIDO es un viaje de ida. No puedes volver atrás. Para realizar el cambio, debe INICIAR LA ACTUALIZACIÓN de la instancia, modificar el parámetro y ejecutar un 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

Esto puede tardar un tiempo en ejecutarse. Una vez hecho esto, rebote la instancia para que se abra normalmente.

Ahora puedo crear una tabla con este tipo de datos más grande.

SQL> create table test_tab (val varchar2(32000));
Table created.