Oracle ORA-01451: 要修改为 NULL 的列无法修改为 NULL,是啥原因?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle ORA-01451: 要修改为 NULL 的列无法修改为 NULL,是啥原因?相关的知识,希望对你有一定的参考价值。
产生此错误的原因是Oracle中不允许将NULL字段修改为NULL字段。
如果要修改可在之前判断一下,然后再修改,给出样例代码如下:
visnull varchar2(4);
begin
select nullable
into visnull
from user_tab_columns
where table_name = upper(\'tblStockInspect\')
and column_name = upper(\'FDepartID\');
if visnull = \'N\' then
execute immediate \'alter table tblStockInspect modify FDepartID int null\';
end if;
end; 参考技术A
最可能的问题,你的gradeld已是允许null了你可测试下,先改为not nullalter table GRADE modify gradeld not null;如果成功,再改回来alter table GRADE modify gradeld null。
修改oracle字段的数据类型,提示不兼容的解决方法:
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;
如:alter table userinfo modify id VARCHAR2 (10); 参考技术D 求毕业留言
坑向: 关于在Navicat中对Oracle数据库表空间的数据文件进行重命名和修改路径时报错ORA-01511,ORA-01121,ORA-01110的解决办法
坑向: 关于在Navicat中对Oracle数据库表空间的数据文件进行重命名和修改路径时报错ORA-01511,ORA-01121,ORA-01110的解决办法
1 环境介绍
- windows环境
- Navicat Premium 12
2.1 发生的问题
Oracle数据库文件进行重命名或修改路径时发生 类似错误 。
2.2 实现目标
将原数据文件 D:\\NEWFILE (其对应表空间为TEST)
重新命名并放置在新的路径下,成为新的数据文件 D:\\OracleDataFile\\BLOCK2
3 主要思路
- 将Oracle数据库完全打开(open状态),
- 以system用户(只要具有可以修改数据文件的权限即可)登录数据库后(采用Navicat连接数据库),
- 将需要修改的表空间设置为离线(需要修改的数据文件属于该表空间),
- 手动先复制原数据文件到指定目录下,并重命名该文件,
- 最后在Navicat中执行相关的修改操作。
4 具体步骤
4.1 打开数据库
启动相关Oracle数据库服务 或 使用sql plus 的 startup命令
4.2 在Navicat上进行对Oracle数据库的连接
4.3.1 选择表空间
4.3.2 找到目标表空间及待修改的数据文件NEWFILE,发现其所属表空间为TEST
4.3.3 将目标表空间设置为离线
4.4 在windows系统中利用windows的图形化文件管理系统 手动将原数据文件进行拷贝(原数据文件NEWFILE复制的目标路径下,并进行重命名)
4.4.1 选择原数据文件 D:\\NEWFILE
4.4.2 复制到目标路径下 D:\\OracleDataFile\\
4.4.3 对手动复制的数据文件进行重命名为 BLOCK2
4.5 在Navicat中进行修改相关属性操作并保存
保存查看最终效果
4.6 如需要对数据文件进行额外操作,需要及时将表空间再次设置为在线(具体可参照4.3.3)
以上是关于Oracle ORA-01451: 要修改为 NULL 的列无法修改为 NULL,是啥原因?的主要内容,如果未能解决你的问题,请参考以下文章