web-dev-qa-db-ja.com

PL / SQLおよびSQLのVARCHAR2の最大サイズは?

Oracle 10gを使用しています。要件では、pl/sql VARCHAR2変数のサイズを増やす必要があります。すでに4000サイズです。 I 既読 その

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

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

29
Ajay Gupta

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

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

ただし、Oracle Databast 12cでは32767( http://docs.Oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF3002

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

27
Andre Kirpitch

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 )に分割し、別々に保存してみてください。

8
zaratustra

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;

5

「SQLの制限を気にせずにこの変数のサイズを増やすことはできますか?」の意味がわかりません。 4000を超えるVARCHAR2をVARCHAR2 SQL列に挿入しようとしない限り、心配する必要はありません。

正確なリファレンスを次に示します(これは11gですが、10gについても同様です)

http://docs.Oracle.com/cd/E11882_01/appdev.112/e17126/datatypes.htm

PL/SQLのVARCHAR2最大サイズ:32,767バイトSQLの最大サイズ4,000バイト

1
hol