37

我在 Oracle 10g 上。在要求中,我需要增加 pl/sql VARCHAR2 变量的大小。它已经是 4000 大小。我读过_

在 PL/SQL 中,VARCHAR2 最多可达 32767 个字节。对于 SQL,限制为 4000 字节

我可以增加这个变量的大小而不用担心 SQL 限制吗?

4

4 回答 4

32

查看官方文档(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

于 2014-08-11T08:45:45.943 回答
8

如果您使用 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)并分别存储它们。

于 2014-08-11T08:58:57.663 回答
7

根据 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;

于 2016-08-02T17:13:23.433 回答
2

不确定“我可以在不担心 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 字节

于 2014-08-11T08:46:36.530 回答