VARCHAR2データ型が非常に少数の文字に制限されているのはなぜだろうといつも思っていました。ほとんどの属性では、2,000バイトを超える必要はありません。 Oracleが制限を2,000バイトから4,000バイトに引き上げたときのことを覚えています。ただし、SQLServer2008R2では8,000を使用できます。私たちは文字データについて話しているのですが、2,000バイトまたは4,000バイトの制限は私には恣意的であるように思えました。現在、Oracle 12cでは、最大32KBのVARCHAR2(32767)を使用できます。ただし、この新機能を使用する前に、少し作業を行う必要があります。箱から出して、エラーが発生します。
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には、VARCHAR2データ型の大きさを制御する新しいパラメータMAX_STRING_SIZEが含まれています。このパラメーターは、STANDARDまたはEXTENDEDに設定できます。デフォルトはSTANDARDで、VARCHAR2を4000バイトに制限します。このパラメーターを標準からEXTENDEDに変更するのは、片道です。元に戻すことはできません。変更を加えるには、インスタンスを起動してアップグレードし、パラメータを変更して、スクリプトを実行する必要があります。
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
これは実行に時間がかかる場合があります。完了したら、インスタンスをバウンスして通常どおり開きます。
これで、この大きなデータ型でテーブルを作成できます。
SQL> create table test_tab (val varchar2(32000)); Table created.