oracle中varchar参数,为什么Oracle varchar2具有强制大小作为定义参数?

It’s the same to define a type of

varchar2(10) or varchar2(1000).

不,这根本就不一样.

>列的长度是构建屏幕的开发人员的有用元数据.

>类似的自动查询工具(如TOAD和sql Developer)在列渲染结果时使用列的长度.

>数据库在为PL / sql集合分配内存时使用变量的长度.由于内存超出PGA超时变量声明可能导致程序发生故障,因为服务器内存已用尽.

>在PL / sql程序中声明单个变量有类似的问题,只是这个集合往往会增加问题.

>超大列会引起复合索引的问题.以下是8K块的数据库

….

sql> create table t23 (col1 varchar2(4000),col2 varchar2(4000))

2 /

Table created.

sql> create index t23_i on t23(col1,col2)

2 /

create index t23_i on t23(col1,col2)

*

ERROR at line 1:

ORA-01450: maximum key length (6398) exceeded

sql>

但最重要的是,列大小是一种错误检查的形式.如果该列应该是十个字符长,一些自动进程正在尝试加载一千个字符,那么有些错误.该过程应该失败,所以我们可以调查为什么我们正在加载数据.另一种是一个充满垃圾的数据库,如果这是想要的,我们应该给予每个人Excel并完成它.

事实证明,我们低估的是改变列大小的确是令人厌烦的.但是它并不经常发生,我们可以通过在我们的PL / sql中使用%TYPE和SUBTYPE声明而不是硬编码变量来缓解很多痛苦.

“why no such declaration in NUMBER type”

数字不同一开始,一个数字的最大大小远小于文本当量(保证精度的38位数).

但是关键的区别在于Oracle存储数值为in scientific notation,因此数字的算术大小与其消耗的存储空间之间没有直接的关系.

sql> select vsize(123456789012345678901) n1

2,vsize(999999999999999999999999999999) n2

3,vsize(0.000000000000000000001) n3

4,vsize(1000000000000000000000000) n4

5 from dual

6 /

N1 N2 N3 N4

---------- ---------- ---------- ----------

12 16 2 2

sql>

然而,尽可能地规定规模和精度仍然是很好的做法,特别是当我们处理整数,说或钱时.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值