我的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;
我做错了什么?
答案 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语句中使用小写也是如此。