美文网首页
ORA-01441:无法减小列长度,因为一些值过大

ORA-01441:无法减小列长度,因为一些值过大

作者: 乐百事52淑熙 | 来源:发表于2018-01-30 19:07 被阅读0次

在修改数据库中表zz中的字段jtdh长度时,出现了如下的问题:

ORA-01441:无法减小列长度,因为一些值过大

看一下我的思路,我先将zz表中jtdh(家庭电话)长度大于30的jtdh(家庭电话)写入bz(备注)

update zz set bz=bz||'原家庭电话信息:'||jtdh,gxsj=sysdate where length(jtdh)>'30';

之后将zz表中jtdh(家庭电话)长度大于30的jtdh(家庭电话)截取长度为30的数据

update zz set jtdh=substr(jtdh,1,30),gxsj=sysdate where length(jtdh)>'30';

commit;

最后,修改zz表中jtdh(家庭电话)长度为30

alter table zz modify jtdh VARCHAR2(30);

是不是觉得这一切都是正常的,没有问题,为什么会报错呢?

实际上这里需要注意的就是:字符与字节的区别

例如:

update zz set bz=bz||'原家庭电话信息:'||jtdh,gxsj=sysdate where length(jtdh)>'30';

就是将字符长度大于30的取出来,但是汉字在oracle中占一个字符,三个字节,就应该写成

update zz set bz=bz||'原家庭电话信息:'||jtdh,gxsj=sysdate where lengthb(jtdh)>'30';

将上面所有按字符取长度的换成按字节取长度,sql如下:

update zz set bz=bz||'原家庭电话信息:'||jtdh,gxsj=sysdate where lengthb(jtdh)>'30';

update zz set jtdh=substrb(jtdh,1,30),gxsj=sysdate where lengthb(jtdh)>'30';

commit;

之后修改字段长度:

alter table zz modify jtdh VARCHAR2(30);

OK,就是这样了。

每天进步一点点。

推荐微信公众号【排骨肉段】,记录日常的美好。

相关文章

  • ORA-01441:无法减小列长度,因为一些值过大

    在修改数据库中表zz中的字段jtdh长度时,出现了如下的问题: ORA-01441:无法减小列长度,因为一些值过大...

  • 小白入门——哈希算法

    哈希 哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。...

  • java多线程(五)并发容器

    Hashhash:散列。把任意长度的输入,变换成固定长度的输出,这个输出值就是散列值,属于压缩映射,容易产生has...

  • 什么是Hash结构

    Hash,即“散列”,就是把任意长度的输入通过散列算法,变换成固定长度输入,该输出就是散列值。

  • hash碰撞的解决办法

    hash : 翻译为“散列”,就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。 开放地址...

  • Go Hash

    哈希 哈希(Hash)也称为散列,是把任意长度的输入通过哈希算法变换为固定长度的输出,这个输出值也就是散列值。 哈...

  • 并发容器--ConcurrentHashMap常见面试题

    首先说下什么是hash?hash是散列的意思,就是把任意长度的数据按照散列算法生成固定长度的输出,该输出就是散列值...

  • MySQL数据库常用函数

    选出表中字符的长度:char_length 计算那么列字符串长度的sin值 计算1.57的sin值 为指定的日期添...

  • Ali-Crypto

    经典算法实现 random hash 是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值.简单的...

  • Hash 原理(一)

    什么是 Hash Hash 就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。例如Integ...

网友评论

      本文标题:ORA-01441:无法减小列长度,因为一些值过大

      本文链接:https://www.haomeiwen.com/subject/gzaczxtx.html