从Oracle官方文档上看到,优化内存开销有这样的表述:

db2 varchar和字节_db2 varchar和字节


机器翻译结果如下:

db2 varchar和字节_SQL_02

翻译中文

声明4000个或更多字符的VARCHAR2变量
VARCHAR2当不确定表达式结果的大小时,可能需要分配大变量。您可以通过声明VARCHAR2较大的变量(例如32000)来节省内存,而不是仅仅通过指定256或1000来估计较高的变量。PL/ SQL的优化使其可以轻松避免溢出问题,并且仍然可以节省内存。指定VARCHAR2变量的大小超过4000个字符;PL / SQL等待直到您分配了变量,然后才根据需要分配尽可能多的存储。

理解

定义大的VARCHAR2()类型,有利于PL/SQL进行内存优化?
不解,求大神指点!

也看到一些例子,说定义过大,会带来一些限制,主要有如下几点:

1、导致索引超出字符限制

由于数据库的限制(参见Logical Database Limits),每个索引的字段的总长度不能超过75% * the database block size再减去some overhead的长度,由于有限制,所以字段的长度也限制了索引字段的大小

2、字段长度能够起到一定的constraint作用,比如一个字段长度要求是10个字节,必须要设置为varchar2(10)。
3、影响程序运行时内存的需求

如果用到ARRAY FETCH,那么客户端fetch 数据需要的内存是根据定义的字段的长度,所以大的字段会需要大的内存。比如10个VARCHAR2(4000)字段,我要取100行,那么就需要 400010100的内存,大约是4M,但是如果定义为VARCHAR2(10),那么就需要1010100的内存。

当然,还有自己的开发经验,比如下游需要使用你的数据,如果人家是string类型或者char类型,看到你的varchar2(4000)就没有了参考价值。

结合ORACLE的帮助文档,求指点!!!

Oracle定义VARCHAR2类型时,是根据实际定义好,还是统一定义大类型?
定义的长度过长,还有什么影响。