修改数据库字段类型

记录生产环境数据库问题

1.问题出现原因

在数据库中本地化城市字段原来是用char(1)类型来存放的城市对应的编码,但是当城市超过10之后,这里编码的大小从1会变成2,导致在数据库中插入时会有数据库异常的情况。

2.解决方法和出现的问题

  1. 这里最开始是准备通过把char(1)改完char(2)来解决,这样乍一看可解决,但是如果查询的是10以内的编码就会有问题,因为char类型是不可变长的,这里设置之后会给原来的1位的编码后面加上一个空格,所以在查询时会有问题

  2. 遇到这个问题后这里就想把这个改为varchar2(2)类型,因为varcahr2类型是可变长,可以解决这个问题,但是有存在新的问题,就是数据库中存在有数据,这里直接修改会出现

    ORA-01439: column to be modified must be empty to change datatype

    这个异常,这里是因为不可以修改有数据时的数据类型

解决方法:

这里可以通过先把原来的列重命名,然后把新增一条和原来名字相同的类,然后把数据复制到新增加的列,最后把原来的列删除

ALTER TABLE TSYS_DEPARTURE RENAME COLUMN LOCALIZED_CITY TO LOCALIZED_CITY_col;//重命名原来的列

ALTER TABLE TSYS_DEPARTURE ADD (LOCALIZED_CITY VARCHAR2(2));//新增和原来一样的列

update TSYS_DEPARTURE td1 set td1.LOCALIZED_CITY = (SELECT td2.LOCALIZED_CITY_col FROM TSYS_DEPARTURE td2 WHERE td1.URID=td2.URID); //复制数据

ALTER TABLE TSYS_DEPARTURE MODIFY (LOCALIZED_CITY VARCHAR2(2) NOT NULL);//这里是因为有数据时不能直接加非空的约束

COMMENT ON COLUMN TSYS_DEPARTURE.LOCALIZED_CITY IS '本地化城市';//加注释

ALTER TABLE TSYS_DEPARTURE DROP (LOCALIZED_CITY_col);//删除原来的列

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值