Oracle 10gを使用しています。要件では、pl/sql VARCHAR2変数のサイズを増やす必要があります。すでに4000サイズです。 I 既読 その
pL/SQLでは、VARCHAR2は最大32767バイトです。 SQLの場合、制限は4000バイトです
SQLの制限を気にせずにこの変数のサイズを増やすことはできますか?
公式ドキュメントを参照してください( 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バイトまたは文字
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 )に分割し、別々に保存してみてください。
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;
「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バイト