关于oracle序列的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于oracle序列的问题相关的知识,希望对你有一定的参考价值。
我创建了一个序列,比如seq_no,我初始值设置的是1,增量是1,缓冲是2。
我希望的是这个序列能一直从1往上增加,1、2、3、4等等。但是我发现有的时候会出现中间的序列号断开的情况,比如1完了之后,下次就到3了,2没有。我在产生1之后,重新启动过数据库,不知道是否和这个有关呢?虽然少一两个序列值影响不大,但是还是希望有什么办法能够让序列值自动连续下来,不丢失最好。
请问大家有什么好的办法吗?谢谢了先~
唉,我积分1分都没有了,希望大家能够不吝赐教~⊙﹏⊙b汗
嗯,楼上的回答也是原因之一,不过楼上的有一种方法避免,就是在确认会正确commit之后,再取seq的值,不过一般没什么意义,seq只是为了自动生成主键或者是给一个数据编成系统唯一标识用的,没啥意义,不用保持连续 参考技术A 我曾经也想解决这个问题,后来发现没什么好的方案,而且意义不大。也就罢了。 参考技术B 因为你设置了缓冲,cache size是保存在内存中的,重启之后应该就消失了,不会被保存。 参考技术C oracle的序列没法做到连续不断号,因为会你插入的语句有rollback的情况,可以在程序里判断当前表中最大的seq值,然后+1这样做,或者做一个序列表
oracle 在存储过程中用动态sql创建序列为何会遇到权限不足的问题呢?
源码如下
SQL> create or replace procedure pro_temp
as
i number;
j number;
k number;
begin
execute immediate 'create sequence sq';
end pro_temp;
/
编译没问题,在以sysdba身份可以顺利执行,为何以普通身份执行就提示权限不足呢?
上边i,j,k没用,我只是试下到目前为止是否正确,就发现这问题了
create sequence
都需要权限。。。
用sysdba给该用户grant一个吧。。
GRANT EXECUTE ANY PROCEDURE TO 普通用户 WITH ADMIN OPTION;
GRANT RESOURCE TO 普通用户; --这个已经包含了序列的权限 参考技术A 从控制台进去给用户赋予权限。oracle权限很多很细的,鼠标点死,怕烦就赋dba。 参考技术B 当然不行了,你没给普通用户授权执行表空间的添加删改的权限
以上是关于关于oracle序列的问题的主要内容,如果未能解决你的问题,请参考以下文章