暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

添加不带NULL约束的列失败以在Oracle12c上创建隐藏列SYS_C[...] 结束

askTom 2017-03-17
302

问题描述

你好!

最近,我遇到了将新列添加到现有表而不是空表中的问题。新列有一个非空约束,所以ALTER TABLE命令失败,ORA-01758 (这是明确的)。
但是查看了DBA/USER_TAB_COLS字典后,我注意到即使ALTER TABLE也失败了,该表中添加了一个新列。它具有系统生成的名称 “SYS_C[....]” 和与要添加的列相对应的数据类型。

由于我无法通过创建隐藏列来解释自己的这种行为-我想请您的支持。请在附加到这个问题的LiveSQL中找到完整的测试用例。

我试图在我的Oracle 11g Express Edition上重现此内容-但它似乎可以按预期工作。

提前感谢您的帮助!

致以最诚挚的问候,
安杰伊

专家解答

嗯,有趣。我怀疑这是一个错误,alter table本身无法清除...

如果这导致您出现问题,则可以使用 “删除未使用的列” 命令删除这些隐藏列:

CREATE TABLE aaa (ID NUMBER, i NUMBER);

INSERT INTO aaa VALUES (1,1);

COMMIT;

ALTER TABLE aaa ADD (a CHAR(7) NOT NULL, b NUMBER);

select column_name,data_type,data_length from user_tab_cols where table_name='AAA';

COLUMN_NAME                 DATA_TYPE  DATA_LENGTH  
ID                          NUMBER     22           
I                           NUMBER     22           
SYS_C00003_17031710:20:29$  CHAR       7            
SYS_C00004_17031710:20:29$  NUMBER     22  

alter table aaa drop unused columns;

select column_name,data_type,data_length from user_tab_cols where table_name='AAA';

COLUMN_NAME  DATA_TYPE  DATA_LENGTH  
I            NUMBER     22           
ID           NUMBER     22           
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论