我在 Oracle 10g 上。在要求中,我需要增加 pl/sql VARCHAR2 变量的大小。它已经是 4000 大小。我读过_
在 PL/SQL 中,VARCHAR2 最多可达 32767 个字节。对于 SQL,限制为 4000 字节
我可以增加这个变量的大小而不用担心 SQL 限制吗?
查看官方文档(http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330)
具有最大长度 size 个字节或字符的可变长度字符串。最大大小为 4000 个字节或字符,最小为 1 个字节或 1 个字符。您必须为 VARCHAR2 指定大小。BYTE 表示该列将具有字节长度语义;CHAR 表示该列将具有字符语义。
但在 Oracle Databast 12c 中可能是 32767 ( http://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020 )
具有最大长度 size 个字节或字符的可变长度字符串。您必须为 VARCHAR2 指定大小。最小大小为 1 个字节或 1 个字符。最大大小为: 32767 字节或字符,如果 MAX_STRING_SIZE = EXTENDED 4000 字节或字符,如果 MAX_STRING_SIZE = STANDARD
如果您使用 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)并分别存储它们。
根据 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 列,就没有什么可担心的。
这是确切的参考(这是 11 克,但也适用于 10 克)
http://docs.oracle.com/cd/E11882_01/appdev.112/e17126/datatypes.htm
VARCHAR2 PL/SQL 中的最大大小:32,767 字节 SQL 中的最大大小 4,000 字节