当前位置: 代码迷 >> 综合 >> oracle序列(sequence)创建失败,无法取值(.nextval),无法删除(drop)解决办法
  详细解决方案

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

热度:47   发布时间:2023-12-22 10:28:20.0


 


出错过程:

(一)我用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

总结:

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


  相关解决方案