此方法有3处update操作,建议根据实际情况的数据量测试评估效率后选用。

思路:定义要更新数据类型的列为[col_old],数据类型为[datatype_old],临时列为[col_temp],数据类型也为[datatype_old]。
根据[col_old],给表添加[col_temp],将[col_old]的数据赋值给[col_temp],再将[col_old]的数据清空,修改[col_old]的数据类型为[datatype_new],然后再将[col_temp]的数据赋值给[col_old],最后删除[col_temp]。

下面以将一张表某列的数据类型由 varchar2(64) 修改为 number为例,给出通用参考脚本。

1.定义变量并赋值

define table_name = 表名
define col_temp = 列名_temp
define col_old = 列名
define datatype_old = varchar2(64)
define datatype_new = number

2.执行脚本

prompt 1.alter table &table_name add &col_temp &datatype_old;
alter table &table_name add &col_temp &datatype_old; prompt 2.update &table_name set &col_temp = &col_old;
update &table_name set &col_temp = &col_old;
commit; prompt 3.update &table_name set &col_old = null;
update &table_name set &col_old = null;
commit; prompt 4.alter table &table_name modify &col_old &datatype_new;
alter table &table_name modify &col_old &datatype_new; prompt 5.update &table_name set &col_old = &col_temp;
update &table_name set &col_old = &col_temp;
commit; prompt 6.alter table &table_name drop column &col_temp;
alter table &table_name drop column &col_temp;

ORA-01439: 要更改数据类型, 则要修改的列必须为空的更多相关文章

  1. Oracle修改字段类型报错:“ORA-01439:要更改数据类型,则要修改的列必须为空”

    在oracle修改user表字段name类型时遇到报错:“ORA-01439:要更改数据类型,则要修改的列必须为空”,是因为要修改字段的新类型和原来的类型不兼容. 如果要修改的字段数据为空时,则不会报 ...

  2. ORA-01440:要减小精度和标准,则要修改的列必须为空

    修改字段的精度时,提示“ ORA-01440:要减小精度和标准,则要修改的列必须为空 ” 解决方法:将该表中的数据全部删除即可

  3. ora-01440:要减小精度或标度,则要修改的列必须为空

    --由于业务需求变更,需要对oracle数据库productinfo表的productPrcie结构进行修改.修改表结构,必须是在表空的情况下才可以修改表结构.具体操作步骤: --1.查看produc ...

  4. ORA-01440 要减小精度或者标度.则要修改的列必须为空.

    --1 创建备份表 drop table contract_kangjia_back; create table contract_kangjia_back as select * from cont ...

  5. racle修改字段类型时报"要更改的列必须为空"处理方法

    执行以下语句报"要修改数据类型,则要更改的列必须为空"      alter table 表名 modify (目标字段 varchar2(100)); 解决步骤: 第一步,在表中 ...

  6. Oracle 修改现有列的数据类型

    如果表中有数据,Oracle是不能修改其数据类型的.但可以通过新建一个临时列,将要修改列的数据复制到临时列中,删除原列再修改临时列的名字.这样说好像有点拗口,分步解说一下. 表AC_REG中有列:is ...

  7. Oracle增加一列、修改一列数据类型

    Oracle增加一列.修改一列数据类型: 添加一列: alter   table   A   add( CFYJSNR  varchar2(20)); 修改列: alter  table A  ren ...

  8. SQLServer修改数据列

    修改数据列 在开发和生产过程中,列名的拼写错误或者列名的更改是需要操作数据表的,大多数情况下都是不需要修改的. 以下几种情况下我们并不能直接修改数据列: 1.用于索引的列. 2.用于 CHECK.FO ...

  9. C# 修改DataTable 列的 DataType

    /// <summary> ///当DataTable中有值时,是不允许修改列的DataType /// 修改数据表DataTable某一列的数据类型和记录值 /// </summa ...

随机推荐

  1. JVM中对象的销毁

    1.可达性分析算法: 可达性分析算法用来寻找将要销毁的对象,它的基本思路是:通过一系列的称为“GC ROOTs”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用链,当一个对象到GC ...

  2. 安装OS X虚拟机错误vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123

    新建一个虚拟机, 选择客户机操作系统为Apple MacOS X 10.10, 其余参数可以默认. 注意建好之后不要急着打开客户机, 因为直接打开你会发现新建的客户机将会无法启动. 仔细阅读Mac O ...

  3. 手把手教android studio中安装Android Butterknife Zelezny (转)

    原文地址:http://blog.csdn.net/xin917480852/article/details/51176524 用来快速生成findViewById() 安装方法: 打开Android ...

  4. jqueryui 进度条使用

    <title></title> <script src="../Js/NewJs_CFJ/jquery.js" type="text/jav ...

  5. java学习笔记(1)

    最近开始学习java基本技术,在这里总结一下我学到的内容: 1.Java的基本历史 java起源于SUN公司的一个GREEN的项目,其原先目的是:为家用消费电子产品发送一个信息的分布式代码系统,通过发 ...

  6. 完成整个DAO的实现及测试代码

    package cn.itcast.domain; import java.util.Date; public class User { private int id; private String ...

  7. 谷歌发布的首款基于HTTP/2和protobuf的RPC框架:GRPC

    Google 刚刚开源了grpc,  一个基于HTTP2 和 Protobuf 的高性能.开源.通用的RPC框架.Protobuf 本身虽然提供了RPC  的定义语法,但是一直以来,Google 只开 ...

  8. DDD实践问题之 - 关于论坛的帖子回复统计信息的更新的思考

    之前,在用ENode开发forum案例时,遇到了关于如何实现论坛帖子的回复的统计信息如何更新的问题.后来找到了自己认为比较合理的解决方案,分享给大家.也希望能和大家交流,擦出更多的火花. 论坛核心领域 ...

  9. Module Zero之语言管理

    返回<Module Zero学习目录> 概览介绍 如何开启 管理语言 管理本地化文本 概览介绍 ABP定义了一个健壮的UI本地化系统,它可用于服务端和客户端.它允许在不同的资源中(Reso ...

  10. Module-Zero之版本管理

    返回<Module Zero学习目录> 概要介绍 版本实体 版本管理者 概要介绍 绝大多数的SaaS(多租户)应用都有多个具有不同特征的版本(包).因此,他们可以给租户(即客户)提供不同的 ...