精华内容
下载资源
问答
  • Oracle修改字段类型Sql --ORA-01439

    千次阅读 2018-12-18 20:45:03
    有一个表名为tb,字段段名为name,数据类型nchar(20...2、假设字段有数据,则改为varchar2(40)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题: --修改原字段...

    有一个表名为tb,字段段名为name,数据类型nchar(20)。

    1、假设字段数据为空,则不管改为什么字段类型,可以直接执行:
    alter table tb modify (name nvarchar2(40));

    2、假设字段有数据,则改为varchar2(40)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题:

    --修改原字段名name为name_tmp
    alter table tb rename column name to name_tmp;
    
    --增加一个和原字段名同名的字段name
    alter table tb add name varchar2(40);
    
    --将原字段name_tmp数据更新到增加的字段name
    update tb set name=trim(name_tmp);
    
    --更新完,删除原字段name_tmp
    alter table tb drop column name_tmp;

    总结:
    1、当字段没有数据或者要修改的新类型和原类型兼容时,可以直接modify修改。
    2、当字段有数据并用要修改的新类型和原类型不兼容时,要间接新建字段来转移。

    展开全文
  • 报错ora-01439错误,字段内容不为空,不能修改字段类型 解决思路,新建一个字段,复制到临时字段后再清空旧字段内容,再修改字段类型,再把值拷回来,再删除临时字段 检查字段类型 desc workflowtomodelog 检查 ...

    ecology E8升E9完成后
    alter table workflowtomodelog modify(billid varchar2(4000))
    报错ora-01439错误,字段内容不为空,不能修改字段类型
    在这里插入图片描述
    解决思路,新建一个字段,复制到临时字段后再清空旧字段内容,再修改字段类型,再把值拷回来,再删除临时字段

    检查字段类型
    desc workflowtomodelog
    检查
    select BILLID from workflowtomodelog 
    新建相同字段类型的临时字段
    alter table workflowtomodelog add BILLIDbak int null
    复制旧字段到新字段
    update workflowtomodelog set BILLIDbak = BILLID 
    检查
    select BILLIDbak,BILLID from workflowtomodelog 
    清空旧字段内容
    update workflowtomodelog set BILLID = null 
    检查
    select BILLIDbak,BILLID from workflowtomodelog 
    修改原字段类型
    alter table workflowtomodelog modify(billid varchar2(4000))
    检查
    select BILLIDbak,BILLID from workflowtomodelog 
    将临时字段值考回原字段
    update workflowtomodelog set BILLID = BILLIDbak
    检查
    select BILLIDbak,BILLID from workflowtomodelog 
    删除临时字段
    alter table workflowtomodelog  drop column BILLIDbak
    检查
    select BILLID from workflowtomodelog 
    

    没有问题后点己更正。

    展开全文
  • 修改oracle数据库字段类型,处理ORA-01439错误 (2011-08-26 12:19)一键转载标签: ORA-01439 修改字段 类型 分类: 经验感想对已经有数据的表修改字段类型时,Oracle提示:ORA-01439: 要更改数据类型, 则要修改...



    对已经有数据的表修改字段类型时,Oracle提示:ORA-01439: 要更改数据类型, 则要修改的列必须为空。
    可以创建新表,灌入原表数据后再改名,或者创建临时字段,替换数据后再删除。
     
    测试环境:
    1. drop table foo;
    2. create table foo (col_name varchar2(5));
    3. insert into foo values('1');
    4. insert into foo values('12');
    5. insert into foo values('33445');
    6. commit;
    7. create index idx1 on foo (col_name);
    8. select * from foo;
    9. desc foo
    解决方法
     
    1. 创建新表
    根据当前表结构创建新表,修改新表字段,将原数据灌进来,删除旧表,将新表rename为旧表名
    1. --此处1=2表示只导入格式,因为表达式为假,不会导入数据
    2. create table new as select * from foo where 1=2;                                            
    3. alter table new modify (col_name number(5));
    4. insert into new select * from foo;
    5. drop table foo;
    6. rename new to foo;
    如果原表有索引,触发器、外键等需要新建。
     
    2.  使用CTAS来转换
    oracle 的使用查询创建表的功能创建一个新表包含原来的数据,命令如下: 
    1. create table new
    2. as 
    3. select [其他的列], 
    4.  to_number(Char_Col) col_name
    5. from foo;
    然后drop 原表,新表更名为原表: 
    1. drop table foo; 
    2. rename new to foo;
    与方法1一样要注意新建相关对象。
     
    3. 创建临时字段替换
    新建一个临时字段,把要修改的字段的内容备份到临时字段后清空原字段,然后再修改类型,之后再把临时字段的内容复制到修改后的字段,最后删除临时字段
    1. alter table foo add(tmp_col number(5));
    2. update foo set tmp_col = to_number(col_name);
    3. update foo set col_name = null; --此处要小心啊,原数据全没了,一定要保证上一步正确执行

    4. alter table foo modify (col_name number(5));
    5. update foo set col_name = tmp_col;
    6. alter table foo drop column tmp_col;
    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(512) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
展开全文
  • ORA-01439 要更改数据类型 则要修改的列必须为空
                   
    create table t_person(id varchar2(200) primary key,name varchar2(200),address varchar2(200));
    insert into t_person(id,name,address) values(sys_guid(),'zhangsan','beijing');insert into t_person(id,name,address) values(sys_guid(),'lisi','shangqiu');

    想把address的varchar2类型改为clob类型

    方法如下:


    (1)

    alter table t_person rename column address to myaddress;

    把原字段换个名字,address改为myaddress


    (2)

    alter table t_person add address clob;

    在表中添加一个原字段名字 address 并把类型定义为自己想改变的类型,这里是clob


    (3)

    update t_person set address = myaddress;

    把备份的myaddress字段内容添加到新建字段address中来


    (4)

    alter table t_person drop column myaddress;

    把备份字段myaddress删除

     

     

    原标题:Orace中已有数据的字段类型修改

    转载请注明出处:http://blog.csdn.net/itmyhome1990/article/details/8681206



     

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 在oracle中,如果已经...错误:ORA-01439: column to be modified must be empty to change datatype   解决方法:把列数据复制出来,列置空后修改再恢复数据  例如:  alter table tablename add tempcolum...
  • 假设字段有数据,则改为varchar2(40)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题: /修改原字段名name为name_tmp/ alter table tb rename column name to ...
  • 修改数据库字段类型,但是由于数据表已经存在数据...ORA-01439: column to be modified must be empty to change datatype 修改方法: Sql代码 altertableweb_app_baseaddtmp_colvarchar2(3999);--...
  • 在oracle修改user表字段name类型时遇到报错:“ORA-01439:要更改数据类型,则要修改的列必须为空”,是因为要修改字段的新类型和原来的类型不兼容。 如果要修改的字段数据为空时,则不会报这种类型的错误,可以进行...
  • 在oracle修改user表字段deptid类型时遇到报错:“ORA-01439:要更改数据类型,则要修改的列必须为空”,是因为要修改字段的新类型和原来的类型不兼容。 如果要修改的字段数据为空时,则不会报这种类型的错误。 解决...
  • 对已经有数据的表修改字段类型时,Oracle提示:ORA-01439: 要更改数据类型, 则要修改的列必须为空。 可以创建新表,灌入原表数据后再改名,或者创建临时字段,替换数据后再删除。   测试环境: ...
  • ORA-01439:column to be modified must be empty to change datatype 描述 在修改字段类型时报错字段不为空解决方法...
  • 在oracle修改user表字段name类型时遇到报错:“ORA-01439:要更改数据类型,则要修改的列必须为空”,是因为要修改字段的新类型和原来的类型不兼容。 如果要修改的字段数据为空时,则不会报这种类型的错误,可以进行...
  • ORA-01439: 要更改数据类型,则要修改的列必须为空[@more@]SQL> desc testName Type Nullable Default Comments ---- ---- -------- -----...
  • --importFlag字段改为string类型alter table Ghreqcoverage modify (importFlag varchar2(2));-- 因为importFlag字段中有值 直接修改报错:column to be modified must be empty to change datatype --表...
  • 显示错误:ORA-01439: column to be modified must be empty to change datatype oracle修改字段类型时原字段有内容无法修改的解决办法,记录一下 转载自大佬 版权声明:本文为博主原创文章,遵循 CC 4.0 ...
  • 问题出现在生产环境,需要修改字段的精度,原来小数点保留5位,改成小数点保留2位,发现不能直接修改,必须情况数据,生产环境怎么可能清空数据呢?开欢笑吧? 后来找到了有效的方法,4步曲,可以直接操作,很安全...
  • 报错: ORA-01439:要更改数据类型,则要修改的列必须为空 原因描述: 是因为要修改字段的新类型和原来的类型不兼容 如果要修改的字段数据为空时,则不会报这种类型的错误,可以进行字段类型的修改 解决方案:(间接...
  • 修改字段类型时,当这个字段中有数据时,就会出现这个错误,再建一列然后将数据同步到该列,再修改字段即可 alter table OA_KSZX_CGGL_H add BASFBJ_BAK varchar2(40);-- 添加临时列 update OA_KSZX_CGGL_H set ...
  • 空空如也

    空空如也

    1 2 3 4 5 ... 20
    收藏数 600
    精华内容 240
    热门标签
    关键字:

    ora-01439