序列不存在ORA-02289

时间:2014-09-08 14:27:29

标签: sql oracle

我的SEQUENCE出了问题。 我以管理员身份创建了一个序列,并为其他用户授予了select和alter权限。

CREATE SEQUENCE  "OWNER"."TOT_SEQ"  MINVALUE 1000 MAXVALUE 1000000000 INCREMENT BY 1 START WITH 1000 CACHE 20 NOORDER  NOCYCLE ;

grant select,ALTER on TOT_SEQ to user;
commit;

当我这样做时:

select sequence_name from all_sequences;

TOT_SEQ

我可以在列表中看到我的SEQUENCE。

但是我无法访问代码中的序列。使用:

select <SEQUNCE_name>.nextval from dual;

我做错了什么?

3 个答案:

答案 0 :(得分:7)

您必须通过以下方式完全验证您的序列:

SELECT <owner>.<sequence name>.nextval FROM dual;

或为其创建公共同义词:

CREATE PUBLIC SYNONYM TOT_SEQ for OWNER.TOT_SEQ;
SELECT TOT_SEQ.nexval FROM DUAL;

答案 1 :(得分:2)

您是否尝试在代码中使用完全限定名称?

select <owner>.<SEQUNCE_name>.nextval from dual;

如果您已经有,可以编辑问题以发布以下命令的输出。 &#34;所有者&#34;,&#34;用户&#34;在你的例子中有点令人困惑。

从all_sequences中选择序列,所有者,其中sequence_name =&#39; TOT_SEQ&#39 ;; 选择grantor,table_name,来自all_tab_privs的权限,其中sequence_name =&#39; TOT_SEQ&#39;;

答案 2 :(得分:2)

确保以大写形式创建序列,即使在trigger / select语句中使用小写也是如此。