繁体   English   中英

PL/SQL 和 SQL 中 VARCHAR2 的最大大小是多少?

[英]What is the max size of VARCHAR2 in PL/SQL and SQL?

我在 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

具有最大长度字节或字符的可变长度字符串。 最大大小为4000字节或字符,最小为1字节或1个字符。 您必须为VARCHAR2指定大小。 BYTE表示该列具有字节长度语义; CHAR表示该列将具有字符语义。

但在Oracle Databast 12c中可能是32767( http://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020

具有最大长度字节或字符的可变长度字符串。 您必须为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最大大小为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;

不确定你的意思是“我可以在不担心SQL限制的情况下增加这个变量的大小吗?”。 只要您不尝试将超过4000个VARCHAR2插入VARCHAR2 SQL列,就没有什么可担心的了。

这是确切的参考(这是11克,但也适用于10克)

http://docs.oracle.com/cd/E11882_01/appdev.112/e17126/datatypes.htm

VAR / PL / SQL中的最大大小:32,767字节SQL 4,000字节的最大大小

Oracle 19:

最大大小:4000 字节,如果 MAX_STRING_SIZE 初始化参数设置为 EXTENDED,则为 32767 字节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM