Je me suis toujours demandé pourquoi le type de données VARCHAR2 était limité à si peu de caractères. Pour la plupart des attributs, vous n'avez pas besoin de plus de 2 000 octets. Je me souviens quand Oracle a augmenté la limite de 2 000 octets à 4 000. Mais SQL Server 2008R2 vous permet d'utiliser 8 000. Nous parlons de données de caractères et la limite de 2 000 ou 4 000 octets me semblait un peu arbitraire. Désormais, dans Oracle 12c, vous pouvez utiliser VARCHAR2(32767) pour un maximum de 32 Ko. Mais avant de pouvoir utiliser cette nouvelle fonctionnalité, vous devez faire un peu de travail. Prêt à l'emploi, vous obtiendrez une erreur.
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 inclut un nouveau paramètre, MAX_STRING_SIZE, qui contrôle la taille maximale de votre type de données VARCHAR2. Ce paramètre peut être réglé sur STANDARD ou ETENDU. La valeur par défaut est STANDARD, ce qui limite VARCHAR2 à 4 000 octets. Changer ce paramètre de standard à EXTENDED est un voyage à sens unique. Vous ne pouvez pas revenir en arrière. Pour effectuer le changement, vous devez STARTUP UPGRADE l'instance, modifier le paramètre et exécuter 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
Cela peut prendre un certain temps à s'exécuter. Une fois cela fait, faites rebondir l'instance pour qu'elle s'ouvre normalement.
Je peux maintenant créer une table avec ce type de données plus volumineux.
SQL> create table test_tab (val varchar2(32000)); Table created.