修改oracle字段的数据类型,提示不兼容,怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改oracle字段的数据类型,提示不兼容,怎么解决?相关的知识,希望对你有一定的参考价值。

原先是char类型,想换成number类型

2种情况

1、你的表里面有不是number的,毕竟你原来用的char

2、你定义的是5,有长度不符合的情况
参考技术A 1、假设字段数据为空,则不管改为什么字段类型,可以直接执行:
alter table tb modify (name nvarchar2(20));

2、假设字段有数据,则改为nvarchar2(20)可以直接执行:
alter table tb modify (name nvarchar2(20));

3、假设字段有数据,则改为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、当字段有数据并用要修改的新类型和原类型不兼容时,要间接新建字段来转移。

oracle数据库的一个表中,怎么设置字段的默认值

这个默认时间没问题,默认的‘无’不管用,怎么办啊?

如果表已经存在,用如下方法设置默认值:

alter table 表名 modify 字段名 default 默认值;

如test表中设置age字段为30,可用如下语句:

alter table test modify age default 30;

扩展资料:

Oracle关于默认值的其他用法

添加、修改默认值:alter table table_name modify column_name default 具体内容;

删除默认值:alter table table_name modify column_name default null;

增加列(约束、默认值)

语法:alter table tb_name add column datatype [default val] constraint .....

如果添加not null(primary key约束要求值也不能为null)约束,需要保证当前表中没有数据存在。

新添加的列,相当于表定义中最后一个定义的列。

参考技术A

如果表已经存在,用如下方法设置默认值。

alter table 表名 modify 字段名 default 默认值;

如test表中设置age字段为30,可用如下语句:

alter table test modify age default 30;

测试:

添加一条记录:

insert into test (name) values ('du小智');

结果:

这里可以看到du小智的默认age则为30。

参考技术B create table TEST(id number,name varchar2(10),create_date date default sysdate);
其中字段:create_date的默认值就是系统时间。

create table TEST(id number,name varchar2(10),create_date varchar2 default '无');
其中字段:create_date的默认值就是字符串“无”。

看了你的例子,觉得很晕。。。按你的表设计的那一列应该是date类型,你希望默认日期是无,那就允许为空就是,默认的应该是null值,也就是你所谓的“无”,如果你希望他显示“无”,那么这一列应该设置为varchar2类型即可。但是问题由来了,你就不可以直接使用sysdate往表里插入日期了,必须使用to_char函数来修改一下,即to_char(sysdate,'yyyy-MM-dd'),才可以插入此列。
参考技术C create table Z_test007
(
RECOID NUMBER(14) not null,
OID NUMBER(14) not null,
SUBSID NUMBER(14) not null,
REGION NUMBER(5) not null,
CUGID NUMBER(10) not null,
name1 varchar2(32) default '无');
参考技术D create table 表名 (
id varchar2(10) default '0000000000'
)

以上是关于修改oracle字段的数据类型,提示不兼容,怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

想更改一个Firebird数据表里面的字段长度,但是更改不了

Oracle修改字段名、字段数据类型

oracle 如何将字段类型varchar 改为blob 更改提示数据类型的变更无效

oracle数据库中怎么设置一个字段的唯一性

oracle数据库中怎么设置一个字段的唯一性?

怎么更新oracle中的number类型字段