出错过程:
(一)我用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
总结:
本来序列操作很简单的,竟然遇到这样的错误, 莫名奇妙。