Oracle
 sql >> Datenbank >  >> RDS >> Oracle

12c VARCHAR2(32767)

Ich habe mich immer gefragt, warum der Datentyp VARCHAR2 auf so wenige Zeichen beschränkt war. Für die meisten Attribute benötigen Sie nicht mehr als 2.000 Bytes. Ich erinnere mich, als Oracle das Limit von 2.000 Bytes auf 4.000 erhöhte. Mit SQL Server 2008R2 können Sie jedoch 8.000 verwenden. Wir sprechen über Zeichendaten und die Grenze von 2.000 oder 4.000 Byte erschien mir irgendwie willkürlich. In Oracle 12c können Sie jetzt VARCHAR2(32767) für maximal 32 KB verwenden. Aber bevor Sie diese neue Funktion nutzen können, müssen Sie ein wenig arbeiten. Im Auslieferungszustand erhalten Sie eine Fehlermeldung.

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 enthält einen neuen Parameter, MAX_STRING_SIZE, der steuert, wie groß Ihr VARCHAR2-Datentyp sein kann. Dieser Parameter kann auf STANDARD oder ERWEITERT eingestellt werden. Der Standardwert ist STANDARD, wodurch VARCHAR2 auf 4000 Byte begrenzt wird. Das Ändern dieses Parameters von Standard auf EXTENDED ist eine Fahrt in eine Richtung. Sie können nicht zurückkehren. Um die Änderung vorzunehmen, müssen Sie die Instanz STARTEN, AKTUALISIEREN, die Parameter ändern und ein Skript ausführen.

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

Dies kann eine Weile dauern. Wenn Sie fertig sind, springen Sie die Instanz zurück, um sie wie gewohnt zu öffnen.

Ich kann jetzt eine Tabelle mit diesem größeren Datentyp erstellen.

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