2014-01-16 47 views

回答

4

這取決於上下文。一個VARCHAR2(32767)的表可以是創建的任何地方的。但32767只能在PL/SQL中使用。 SQL中的限制仍然是4000.

SQL> --#1: SQL, 4000. 
SQL> create or replace type varchar2_limit is table of varchar2(4000); 
    2/

Type created. 

SQL> create table varchar2_limit_table1 
    2 (
    3  a varchar2_limit 
    4 ) nested table a store as my_nt; 

Table created. 

SQL> --#2: SQL, 4001. 
SQL> drop table varchar2_limit_table1; 

Table dropped. 

SQL> create or replace type varchar2_limit is table of varchar2(4001); 
    2/

Type created. 

SQL> create table varchar2_limit_table2 
    2 (
    3  a varchar2_limit 
    4 ) nested table a store as my_nt; 
create table varchar2_limit_table2 
* 
ERROR at line 1: 
ORA-02320: failure in creating storage table for nested table column A 
ORA-00910: specified length too long for its datatype 


SQL> --#3: PL/SQL, 32767. 
SQL> declare 
    2  type varchar2_limit is table of varchar2(32767); 
    3 begin 
    4  null; 
    5 end; 
    6/

PL/SQL procedure successfully completed. 

SQL> --#4: PL/SQL, 32768 
SQL> declare 
    2  type varchar2_limit is table of varchar2(32768); 
    3 begin 
    4  null; 
    5 end; 
    6/
     type varchar2_limit is table of varchar2(32768); 
               * 
ERROR at line 2: 
ORA-06550: line 2, column 43: 
PLS-00215: String length constraints must be in range (1 .. 32767) 
+0

因此,該表只能容納4000個字節的varchar2? – gravetii

+0

正確。除非你使用12c,否則在所有情況下限制已經擴展到32767。 –

1

在Oracle 12c中,限制爲32'767字節。但是,它必須由Oracle參數MAX_STRING_SIZE = EXTENDED啓用。您應該按照Oracle文檔中給出的步驟進行操作:MAX_STRING_SIZE

相關問題