37

私はOracle 10gを使用しています。要件として、pl/sql VARCHAR2 変数のサイズを大きくする必要があります。すでに4000サイズです。私はそれを読みまし

PL/SQL では、VARCHAR2 は最大 32767 バイトです。SQL の場合、制限は 4000 バイトです

SQL の制限を気にせずに、この変数のサイズを増やすことはできますか?

4

4 に答える 4

32

公式ドキュメントを参照してください ( http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330 )

最大長が size バイトまたは文字の可変長文字列。最大サイズは 4000 バイトまたは文字で、最小サイズは 1 バイトまたは 1 文字です。VARCHAR2 のサイズを指定する必要があります。BYTE は、列がバイト長セマンティクスを持つことを示します。CHAR は、列に文字セマンティクスがあることを示します。

しかし、Oracle Databast 12c ではおそらく 32767 ( http://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020 )

最大長が size バイトまたは文字の可変長文字列。VARCHAR2 のサイズを指定する必要があります。最小サイズは 1 バイトまたは 1 文字です。最大サイズ: MAX_STRING_SIZE = EXTENDED の場合は 32767 バイトまたは文字 MAX_STRING_SIZE = STANDARD の場合は 4000 バイトまたは文字

于 2014-08-11T08:45:45.943 に答える
8

UTF-8 エンコーディングを使用すると、1 文字がさまざまなバイト数 (2 ~ 4) になる可能性があります。PL/SQL の場合、varchar2 の制限は文字数ではなく 32767 バイトです。4000 文字サイズの PL/SQL varchar2 変数を増やす方法を参照してください。

SQL> set serveroutput on
SQL> l
  1  declare
  2    l_var varchar2(30000);
  3  begin
  4    l_var := rpad('A', 4000);
  5    dbms_output.put_line(length(l_var));
  6    l_var := l_var || rpad('B', 10000);
  7    dbms_output.put_line(length(l_var));
  8* end;
SQL> /
4000
14000

PL/SQL procedure successfully completed.

ただし、そのような変数の値をテーブルに挿入することはできません。

SQL> ed
Wrote file afiedt.buf

  1  create table ttt (
  2    col1 varchar2(2000 char)
  3* )
SQL> /

Table created.

SQL> ed
Wrote file afiedt.buf

  1  declare
  2    l_var varchar2(30000);
  3  begin
  4      l_var := rpad('A', 4000);
  5      dbms_output.put_line(length(l_var));
  6      l_var := l_var || rpad('B', 10000);
  7      dbms_output.put_line(length(l_var));
  8      insert into ttt values (l_var);
  9* end;
SQL> /
4000
14000
declare
*
ERROR at line 1:
ORA-01461: can bind a LONG value only for insert into a LONG column
ORA-06512: at line 8

解決策として、この変数の値をいくつかの部分 ( SUBSTR ) に分割し、それらを別々に保存することを試みることができます。

于 2014-08-11T08:58:57.663 に答える
7

Andre Kirpitch が共有する公式ドキュメントのリンクによると、Oracle 10g では varchar2 の最大サイズは 4000 バイトまたは文字です。より高いバージョンの oracle (Oracle 12c など) を使用している場合は、varchar2 の最大サイズを 32767 バイトまたは文字にすることができます。Oracle 12 の拡張データ型機能を利用するには、Oracle をアップグレード モードで起動する必要があります。コマンド プロンプトで次の手順を実行します。

1)Login as sysdba (sqlplus / as sysdba)

2)SHUTDOWN IMMEDIATE;

3)STARTUP UPGRADE;

4)ALTER SYSTEM SET max_string_size=extended;

5)Oracle\product\12.1.0.2\rdbms\admin\utl32k.sql

6)SHUTDOWN IMMEDIATE;

7)STARTUP;

于 2016-08-02T17:13:23.433 に答える