我在使用Oracle 10g。在一个需求中,我需要增加pl/sql VARCHAR2变量的大小。它已经是4000大小了。I have read that
在PL/SQL中,VARCHAR2最多可达32767个字节。对于SQL,限制为4000字节
我可以在不担心SQL限制的情况下增加这个变量的大小吗?
发布于 2014-08-11 16:45:46
请参阅官方文档(http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330)
具有最大长度、大小、字节或字符的
可变长度字符串。最大为4000字节或字符,最小为1字节或1个字符。您必须指定VARCHAR2的大小。BYTE表示该列将具有字节长度语义;CHAR表示该列将具有字符语义。
但在Oracle数据库12c中可能是32767 (http://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020)
具有最大长度、大小、字节或字符的
可变长度字符串。您必须指定VARCHAR2的大小。最小大小为1个字节或1个字符。最大大小为: 32767字节或字符(如果MAX_STRING_SIZE =扩展的4000字节)或字符(如果MAX_STRING_SIZE =标准
发布于 2014-08-11 16:58:58
如果使用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),并将它们分开存储。
发布于 2016-08-03 01:13:23
根据Andre gives共享的官方文档链接,Oracle10g为varchar2提供了4000字节或字符的最大大小。如果您使用的是更高版本的oracle (例如Oracle12c),则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;
https://stackoverflow.com/questions/25237463
复制相似问题