首先,我感谢您的帮助,并对我的英语感到抱歉。
我是一名学生,我的老师为我创建了一个模式,这样我就可以使用Oracle数据库了。它运行得很好,但今天我删除了一些表并添加了其他表,当我试图在新表中插入一些内容时,它给了我一个错误:
ora-30667无法删除空列上默认值的非空约束
我读到一些关于这个错误的东西,还有一些说要清理回收站,但它对我不起作用;它仍然给我那个错误。
即使是一个简单的例子也给了我错误:
create table example(example_id number(10), example_name varchar(255));
insert into example(example_id, example_name) values(1, 'example');
请帮帮我,我必须做这项工作,但那个错误不让我做。
Oracle版本:Oracle Database 12c Enterprise Edition Release 12.1.0.1.0-64位生产版
版本:
我试过这个,作为一个完整的例子:
create table tipo_funcionario(
id_tipo_funcionario number(10),
descricao varchar(255)
);
insert into tipo_funcionario(id_tipo_funcionario, descricao) values(1, 'gestor');
我执行,上面写着:
insert into tipo_funcionario(id_tipo_funcionario, descricao) values(1, 'gestor') Error report - SQL Error: ORA-00604: error occurred at recursive sql level 1 ORA-30667: cannot drop not null constraint on a default on null column 00604. 00000 - "error occurred at recursive SQL level %s" *Cause: An error occurred while processing a recursive SQL statement (a statement applying to internal dictionary tables). *Action: If the situation described in the next error on the stack can be corrected, do so; otherwise contact Oracle Support.
我花了一天的大部分时间试图克服这个错误。它会随机消失,让我运行查询,但随后它会无缘无故地再次运行。
"第1行出现错误:ORA-00604:递归SQL级别1发生错误ORA-30667:无法删除DEFAULT on NULL列""上的NOT NULL约束
显然,这是Oracle 12.1的一个错误。
我终于找到了修复方法,即在sqlplus:purge recyclebin;
中运行此命令
我花了这么长时间进行故障排除,因为我认为这是sql的问题。
我不知道它是否仍然相关,但如果相关:如果您可以使用简单的命令行工具(如SQL Plus)重试插入,例如,我相信您不会收到那个错误。看起来您使用的GUI工具有一个"自由SQL"区域,并且在执行之前没有标记插入命令的特定文本,也没有使用半列或任何其他编辑器分隔符来分隔不同的命令。
您可以清除回收站以暂时解决此问题。
我正在寻找甲骨文支持的确切错误。