读书人

急 PB + oracle 数据库insert有关问

发布时间: 2012-03-08 13:30:13 作者: rapoo

急急! PB + oracle 数据库insert问题
假设现有一表
keycode,id,name


现在需要insert数据,会存在并发操作的问题,id需要流水号生成(每次加1),在多台电脑同时插入,保证id流水号顺利的功能
之前用oracle的序列功能测试过,但是insert失败也会导致id增加,所以这种方法不可行
请各位大虾给个可行,简便的方法


在线等


[解决办法]
如果你不想用序列的话,还可以有三种方法:
1.可以建一个表专存流水号,在insert前取号,insert成功后更新表流水号;
2.如果id是number型,直接slect max(nvl(id,0))+1 from 表;
3.建触发器,
CREATE OR REPLACE TRIGGER tr_name
BEFORE INSERT ON tablename FOR EACH ROW
BEGIN
...
:New.id := :Old.id+1;(感觉可以,没测^_^)

END;

[解决办法]
触发器取ID加1

SQL code
CREATE OR REPLACE TRIGGER tr_name  BEFORE INSERT ON table_name  FOR EACH ROWDECLARE  v_ID       number;BEGIN  v_ID := 0;   SELECT MAX(ID)    INTO v_ID    FROM table_name;  IF v_ID IS NULL THEN      v_ID := 0;  END IF;   :NEW.ID := v_ID + 1 ;END tr_name; 

读书人网 >PB

热点推荐