sql >> データベース >  >> RDS >> Oracle

12c VARCHAR2(32767)

    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.

    1. すでに実行中の64ビットOracleDatabaseServerを実行しているWindowsServerへのOracle32ビットクライアントのインストール

    2. サブクエリの問題でのOracleSQLの順序付け!

    3. Oracleの隠し機能

    4. MySQLでピボットテーブルの出力を返すにはどうすればよいですか?