ora-30667不能在空列

时间:2015-12-15 22:47:37

标签: sql oracle oracle12c

在此之前,我感谢任何帮助,对我的英语感到抱歉。

我是学生,我的老师为我创建了一个架构,所以我可以使用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企业版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.

3 个答案:

答案 0 :(得分:0)

我不知道它是否仍然相关 - 但如果是: 如果您可以使用简单的命令行工具(如SQL Plus)重试插入,例如我相信你不会得到那个错误。 看起来你使用的GUI工具有一个免费的SQL'区域,在执行之前不要标记插入命令的特定文本,也不要使用半列或任何其他编辑器分隔符分隔不同的命令。

答案 1 :(得分:0)

您可以清除回收站以临时解决此问题。

我正在从oracle支持中寻找确切的错误。

答案 2 :(得分:0)

我一整天都在尝试克服此错误。它会随机消失,让我运行查询,但随后它会无缘无故地再次开始执行该操作。

“第1行出现错误: ORA-00604:递归SQL级别1发生错误 ORA-30667:无法在DEFAULT ON NULL列上删除NOT NULL约束“

显然,这是Oracle 12.1的错误。

我终于找到了解决方法,该解决方法是在sqlplus中运行以下命令:purge recyclebin;

我花了很长时间进行故障排除,因为我认为这是sql的问题。