我在Oracle 10g上。在一个要求中,我需要增加pl / sql VARCHAR2变量的大小。它已经达到4000尺寸。我have read那个
在PL / SQL中,VARCHAR2最多可达32767个字节。对于SQL,限制是 4000字节
我可以在不担心SQL限制的情况下增加此变量的大小吗?
答案 0 :(得分:27)
请参阅官方文档(http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330)
具有最大长度字节或字符的可变长度字符串。最大大小为4000字节或字符,最小为1字节或1个字符。您必须为VARCHAR2指定大小。 BYTE表示该列具有字节长度语义; CHAR表示该列将具有字符语义。
但在Oracle Databast 12c中可能是32767(http://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020)
具有最大长度字节或字符的可变长度字符串。您必须为VARCHAR2指定大小。最小大小为1个字节或1个字符。最大尺寸为: 如果MAX_STRING_SIZE = EXTENDED,则为32767个字节或字符 如果MAX_STRING_SIZE = STANDARD
,则为4000个字节或字符
答案 1 :(得分:7)
如果使用UTF-8编码,则一个字符可以采用不同数量的字节(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)并单独存储。
答案 2 :(得分:5)
根据Andre Kirpitch共享的官方文档链接,Oracle 10g最大大小为4000字节或varchar2的字符。 如果您使用的是更高版本的oracle(例如Oracle 12c),则可以获得最大大小为32767字节或varchar2的字符。 要利用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;
答案 3 :(得分:1)
不确定您的意思"我可以在不担心SQL限制的情况下增加此变量的大小吗?"。只要您不尝试将超过4000个VARCHAR2插入VARCHAR2 SQL列,就无需担心。
这是确切的参考(这是11克,但也适用于10克)
http://docs.oracle.com/cd/E11882_01/appdev.112/e17126/datatypes.htm
VARCHAR2 PL / SQL中的最大大小:32,767字节SQL中的最大大小 4,000字节