Oracle生产环境修改表的结构

前言

项目最近验收,需要将数据库(Oracle11g)不合规范的表的字段进行类型修改,但是生产环境中是包含数据的,无法直接修改类型。并且某些字段还是主键,上面包含自增触发器,主键约束等。这里提供了两种方法,第一种不会影响该主键上的约束和触发器,但是略显繁琐。方法二步骤简单,但是会为该字段重新创建各种约束。

方法1:

#关闭各种触发器,约束
ALTER TRIGGER TIB_BILLING_DETAIL_TEMP Disable;
ALTER TABLE BILLING_DETAIL_TEMP DISABLE CONSTRAINT BILLING_DETAIL_TEMP_PK;
ALTER TABLE BILLING_DETAIL_TEMP DISABLE CONSTRAINT SYS_C0078432;

#增加临时字段
ALTER TABLE BILLING_DETAIL_TEMP ADD TEMP_COL varchar2(20);
UPDATE BILLING_DETAIL_TEMP SET TEMP_COl = trim(ID);
UPDATE BILLING_DETAIL_TEMP SET ID  = NULL;

#修改原来字段类型
ALTER TABLE BILLING_DETAIL_TEMP MODIFY ID NUMBER(20,0);
UPDATE BILLING_DETAIL_TEMP SET ID = trim(TEMP_COL);
ALTER TABLE BILLING_DETAIL_TEMP DROP COLUMN TEMP_COL;

#开启触发器和主键约束
ALTER TRIGGER TIB_BILLING_DETAIL_TEMP ENABLE;
ALTER TABLE BILLING_DETAIL_TEMP ENABLE CONSTRAINT BILLING_DETAIL_TEMP_PK;
ALTER TABLE BILLING_DETAIL_TEMP ENABLE CONSTRAINT SYS_C0078432;

方法2:

新增一个列,这样原来列的约束也会被删掉,新增的列也需要重新创建约束,增加注释等。

ALTER  TABLE  BILLING_DETAIL RENAME COLUMN BILLING_ID to TEMP_COL;
ALTER TABLE BILLING_DETAIL ADD BILLING_ID NUMBER(22,0);
UPDATE BILLING_DETAIL SET BILLING_ID  = trim(TEMP_COL);
COMMENT  ON  COLUMN  BILLING_DETAIL.BILLING_ID is '订单id';
ALTER TABLE BILLING_DETAIL DROP COLUMN TEMP_COL;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值