Oracle-savepoint相关

总结:在同一个会话下,如果savepoint的名称相同,新的savepoint则会覆盖旧的savepoint,在不同的会话下,savepoint的名称相同,不会相互影响。
为了避免savepoint名称相同,可以在建立savepoint名称时使用时间戳拼接

经过验证,在不同的session使用相同名称的savepoint,也不会互相影响。

session1

INSERT INTO your_table (column1) VALUES ('s1-value1');
SAVEPOINT sp1;

INSERT INTO your_table (column1) VALUES ('s1-value2');
SAVEPOINT sp2;

INSERT INTO your_table (column1) VALUES ('s1-value3');
SAVEPOINT sp3;

--column1 in ('s1-value1', 's1-value2', 's1-value3')
SELECT * FROM your_table;

ROLLBACK WORK TO sp2;

--column1 in ('s1-value1', 's1-value2')
SELECT * FROM your_table;

session2

INSERT INTO your_table (column1) VALUES ('s2-value1');
SAVEPOINT sp1;

INSERT INTO your_table (column1) VALUES ('s2-value2');
SAVEPOINT sp2;

INSERT INTO your_table (column1) VALUES ('s2-value3');
SAVEPOINT sp3;

--column1 in ('s2-value1', 's2-value2', 's2-value3')
SELECT * FROM your_table;

ROLLBACK WORK TO sp1;

--column1 in ('s2-value1')
SELECT * FROM your_table;

经过验证,在同一个session下,相同名称的savepoint,新的savepoint会覆盖旧的savepoint

INSERT INTO your_table (column1) VALUES ('value1');
SAVEPOINT sp1;

INSERT INTO your_table (column1) VALUES ('value2');
SAVEPOINT sp1;

INSERT INTO your_table (column1) VALUES ('value3');
SAVEPOINT sp2;

--column1 in ('value1', 'value2', 'value3')
SELECT * FROM your_table;

ROLLBACK WORK TO sp1;

--column1 in ('value1', 'value2')
SELECT * FROM your_table;

INSERT INTO your_table (column1) VALUES ('value4');
SAVEPOINT sp4;

INSERT INTO your_table (column1) VALUES ('value5');
SAVEPOINT sp5;

--column1 in ('value1', 'value2', 'value4', 'value5')
SELECT * FROM your_table;

ROLLBACK WORK TO sp4;

--column1 in ('value1', 'value2', 'value4')
SELECT * FROM your_table;

--ORA-01086: 从未在此会话中创建保存点 'SP5' 或者该保存点无效
ROLLBACK WORK TO sp5;

--column1 in ('value1', 'value2', 'value4')
SELECT * FROM your_table;
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值