没法解决,不能使sequence回退,除非重建
解决方案 »
- oracle9i数据库加载失败
- update触发器的问题 如何知道update的是哪个字段
- 大家来讨论下oracle erp都涉及到哪些技术?
- 急问:XML入ORACLE库的问题 分不够尽管说
- 这个 sql语句怎么写(急)
- "数据库异常:数据提供方内部错误(-3000) ",在线等 ,解决即结帐,决不食言!!!
- 如何在oracle中用SQL取得表的结构信息
- 为什么我用(用户名:system密码:manager)登入oracle sql*plus无法登入
- 创建触发器为何总是报“Warning: Trigger created with compilation errors”
- SELECT日期判断语句今天昨天
- 急!!!!!oracle安装问题???????给分
- 我有两个实例,如何备份处其中的一个
如果我保存出错,则seq增加1,而此时我退出程序了,则序列还是递增1了,下次操作时还是出现跳空现象,难道这个问题真的不能解决了
CREATE OR REPLACE PACKAGE pkg_test
AS
t_id number:=1;
END pkg_test;
/create trigger name_tri
before insert on table
for each row
begin
:new.id:=t_id;
t_id:=t_id+1;
exception
when others then
t_id:=t_id-1;
end;
/
看是否行?
CREATE OR REPLACE XXX AS
BEGIN
AA:=0;
BEGIN
INSERT INTO AAA VALUES(BBB。CURRVAL);
EXCEPTION WHEN OTHERS THEN
AA:=1;
GOTO DDD
END;
《DDD》
IF AA=1 THEN
NULL;
ELSE
BBB。NEXTVAL;
END IF;
END;
每一个新的session里面,初始t_id都是1,那不要出现成堆的重复记录了
OO4O中,默认使用了cache,这是和数据库中的cache不同的,所以这样做:
Public Function getSequence(sName As String) As Long
On Error GoTo errHandle''''''''''''''''''
'' 取得sequence值
''
''''''''''''''''''
SQL = "select " & sName & ".nextval from dual"
Set oraRs = oraDatabase.dbcreatedynaset(SQL, &H4&)getSequence = oraRs.Fields("nextval").value
Exit Function
errHandle:
getSequence = -1
End Function这里面最重要的就是&H4&
如果对的话一定要给我分噢:P
在过程中使用事务。程序中调用该过程时,将要插入的数据传给过程。
INSERT INTO AAA VALUES(BBB。CURRVAL);
你这插的是序列的当前值,那不是重复了吗,即使执行成功,数据重复有啥意思。
不是很明白你的存储过程
否则你怎么保持那个值是递增的。如果有重复值,就要跳出报错,也就是将那个NULL的地方,
改成一个MESSAGE就是了。
方法很多,不要局限在一点上。
ID NUMBER;
BEGIN
INSERT INTO TAB VALUES(SEQ.CURRVAL);
SEQ.NEXTVAL;
EXCEPTION
WHEN OTHERS THEN
RETURN ERROR HANDLE
END;
declare
n number(10);
tsql varchar2(100);
begin
select my_seg.nextval into n from dual;
n:=-1;
tsql:='alter sequence my_seg increment by'|| n;//把increment设为负数
execute immediate tsql;
select my_seg.nextval into n from dual;//达到减一的效果
tsql:='alter sequence my_seg increment by 1';//恢复原来的increment参数值
execute immediate tsql;
end;
/