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.