大家好。 我现在有一个序列和触发器(如下),不知道为什么序列号不会自动更新。例如,我第一次创建5条记录(id将会是1--5),但当我把他们全部删除,再建5条,第一条记录的id却从6开始。请问怎么解决这个问题。谢谢指教!!!!序列:
DROP SEQUENCE SCOTT.SEQ_MEMEBER;CREATE SEQUENCE SCOTT.SEQ_MEMEBER
START WITH 11
MAXVALUE 99999999
MINVALUE 1
CYCLE
NOCACHE
NOORDER;触发器:
CREATE OR REPLACE TRIGGER SCOTT.TRIGGER_MEMBER
BEFORE DELETE OR INSERT OR UPDATE
ON SCOTT.MEMBER
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
WHEN (
new.id is null
)DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 0; SELECT seq_memeber.NEXTVAL INTO tmpVar FROM dual;
:NEW.id := tmpVar; EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END trigger_member;
/
DROP SEQUENCE SCOTT.SEQ_MEMEBER;CREATE SEQUENCE SCOTT.SEQ_MEMEBER
START WITH 11
MAXVALUE 99999999
MINVALUE 1
CYCLE
NOCACHE
NOORDER;触发器:
CREATE OR REPLACE TRIGGER SCOTT.TRIGGER_MEMBER
BEFORE DELETE OR INSERT OR UPDATE
ON SCOTT.MEMBER
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
WHEN (
new.id is null
)DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 0; SELECT seq_memeber.NEXTVAL INTO tmpVar FROM dual;
:NEW.id := tmpVar; EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END trigger_member;
/
解决方案 »
- oracle9 like匹配数字
- 《《在线等》》update 和 in 一起使用很慢
- 菜鸟求教 Microsoft Visual Studio 2008怎么跟SQL语句结合
- 请那位好心的朋友帮忙把redhat9 下安装oracle(9.2.0.4)比较详细的文档发到帖子上,我们这上网限制
- 使用exp方式,怎么导出另一台机器上oracle数据库
- 在存储过程中怎么用动态游标?
- Oracle安装问题!哪位哥哥知道?告诉MM一下好吗?高分相送的哦!
- Oracle问题,在线等待,看看。谢谢
- 简单问题,高手请进
- 请教C#开发oracle程序的问题
- oracle中 数据库实例不可用 怎么解决
- 关于一个SQL语句的优化
CREATE OR REPLACE TRIGGER SCOTT.TRIGGER_MEMBER
BEFORE INSERT
ON SCOTT.MEMBER
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 0; SELECT NVL(MAX(id),0) INTO tmpVar FROM SCOTT.MEMBER; --取上次最大值,NVL用于第一次插入的判断。
:NEW.id := tmpVar+1; --加1 EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END trigger_member;
2、修改序列。
3、查询当前序列CURRVAL,然后可以使用的数范围 0~序列.CURRVAL ,不过用完后需要跳过这个当前值,否则会报错。这个比较麻烦。
4、不用序列,用一变量控制。
2.继续使用SCOTT.SEQ_MEMEBER也无碍程序。