建表:插记录create  table tablename (id int,RQ1 datetime,RQ2 datetime)
-- select * from tablenameinsert into tablename 
select 1,'2009-01-01 10:00:00','2009-01-02 11:00:00' union
select 2,'2009-01-02 10:00:00','2009-01-04 10:30:00' union
select 3,'2009-01-03 10:00:00','2009-01-06 11:30:00' 
存储过程,包含出错回滚create  PROCEDURE a(ia int )
begin
start TRANSACTION;
insert into tablename values(ia+1,'2009-01-01 10:00:00','2009-01-02 11:00:00');
insert into tablename values(ia+2,'2009-01-01 10:00:00','2009-01-02 11:00:00');
insert into tablename values(ia,'2009-01-01 10:00:00','2009-01-02 11:00:00');
-- ROLLBACK; 
COMMIT ;
end表里面,第一个字段id 是主键,这样就不允许插入重复值。。
call(1),这样插进去2,3,1
再CALL 3, 这样插进去4,5,3.。到3的时候,判断出来主键重复,希望执行回滚操作。。这个存储过程应该怎么样修改??请高手帮忙看下。。

解决方案 »

  1.   

    自己解决了create  PROCEDURE a(ia int )
    begin
    declare exit handler for sqlexception rollback;
    start TRANSACTION;
    insert into tablename values(ia+1,'2009-01-01 10:00:00','2009-01-02 11:00:00');
    insert into tablename values(ia+2,'2009-01-01 10:00:00','2009-01-02 11:00:00');
    insert into tablename values(ia,'2009-01-01 10:00:00','2009-01-02 11:00:00');
    -- ROLLBACK; 
    COMMIT ;
    end红色部分,只要出现SQL错误,自动回滚。
      

  2.   

    declare exit handler for sqlexception rollback;你既然决定exit,那么用这个了。