Oracle序列(sequence)创建失败,无法取值(.nextval),无法删除(drop)解决办法

来源:互联网 发布:水果产地调查表软件 编辑:程序博客网 时间:2024/06/08 11:10

Oracle序列(sequence)创建失败,无法取值(.nextval),无法删除(drop)解决办法

出错过程:

(一)我用oracle帐户TRACQDEV下利用myEclipse数据库工具中创建了一个序列:

CREATE SEQUENCE "TRACQDEV"."seq_agent_money_log_id" MINVALUE 1 MAXVALUE 1.00000000000000E+27 INCREMENT BY 1 START WITH 1 CACHE 10 NOORDER NOCYCLE

(二)在sqlplus中查询失败:

SQL> select seq_agent_money_log_id.nextval from dual;
select seq_agent_money_log_id.nextval from dual
       *
ERROR at line 1:
ORA-02289: sequence does not exist

(三)删除该序列也出错:

SQL> drop sequence 'seq_agent_money_log_id';
drop sequence 'seq_agent_money_log_id'
              *
ERROR at line 1:
ORA-02277: invalid sequence name

(四)却能在用户的序列表里查询到:

SQL> select sequence_name from user_sequences where sequence_name='seq_agent_money_log_id';

SEQUENCE_NAME
------------------------------
seq_agent_money_log_id

(五)再创建同名序列时报错,提示该序列名称已经被占用:


SQL> CREATE SEQUENCE "TRACQDEV"."seq_agent_money_log_id" MINVALUE 1 MAXVALUE 1.00000000000000E+27 INCREMENT BY 1 START WITH 1 CACHE 10 NOORDER NOCYCLE ;
CREATE SEQUENCE "TRACQDEV"."seq_agent_money_log_id" MINVALUE 1 MAXVALUE 1.00000000000000E+27 INCREMENT BY 1 START WITH 1 CACHE 10 NOORDER NOCYCLE
                            *
ERROR at line 1:
ORA-00955: name is already used by an existing object

(六)用oracle的sys用户操作也一样


(七)解决办法:

SQL> drop sequence "TRACQDEV"."seq_agent_money_log_id" ;

Sequence dropped.

(八)原因

开始我怀疑时MyEclipse数据库工具的bug。
但是用同样的创建语句在oracle的sqlplus下执行创建也同样报错。

可见时序列名称的问题,我本意是想在"TRACQDEV"用户下创建"seq_agent_money_log_id" 序列。
实际上是在当前用户下创建了"TRACQDEV"."seq_agent_money_log_id" 序列。

所以,select seq_agent_money_log_id.nextval from dual 报错。
而 select "TRACQDEV"."seq_agent_money_log_id".nextval from dual 则执行成功。

但是令人费解的是,为何在user_sequences 中显示的序列名称为 seq_agent_money_log_id

总结:

   本来序列操作很简单的,竟然遇到这样的错误, 莫名奇妙。

原创粉丝点击