Oracle
 sql >> Base de données >  >> RDS >> Oracle

12c VARCHAR2(32767)

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.