添加带默认值的列时错误填充其他列的问题咨询
添加带默认值的列时错误填充其他列的问题咨询
看起来你遇到的是Oracle SQL Developer的特殊行为(甚至可以说是bug),而非Oracle数据库本身的问题,我来帮你梳理下原因和解决办法:
首先先明确Oracle数据库的标准逻辑:当你用ALTER TABLE同时添加多列时,规则是很清晰的:
- 没有指定默认值的列(比如你的
test1),现有行的该列会被填充为NULL(只要该列没加NOT NULL约束); - 只有标注了
DEFAULT 'T' NOT NULL的列(比如test2、test3),才会自动用'T'填充现有行。
但你碰到的异常结果,大概率是SQL Developer在**“运行脚本”模式(快捷键F5)**下解析多列添加语句时出了错。部分旧版本的SQL Developer会错误拆分ALTER TABLE ... ADD (...)里的多列定义,甚至把后面列的默认值属性“串”到前面的列上,导致不该有默认值的列也被填充了'T'。
给你几个验证和解决的方法:
- 试试用**“运行语句”模式(快捷键Ctrl+Enter)**单独执行这条ALTER TABLE语句,正常情况下结果会符合预期;
- 把多列添加拆分成多条独立的
ALTER TABLE语句执行,比如:
这样拆分后,ALTER TABLE test_table ADD test1 varchar2(1 char); ALTER TABLE test_table ADD test2 varchar2(1 char) default 'T' not null;test1列会是NULL,test2列是'T',完全符合你的预期; - 检查你的SQL Developer版本,这类解析错误在较新的版本里已经被修复了,如果用的是旧版本,升级到最新版应该能彻底解决这个问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

