Jor*_*kum 3 oracle plsql transactions
如果一个或多个迭代崩溃,我需要帮助来完成迭代回滚,如果成功,我需要提交所有其他迭代.如果崩溃,它将回滚整个事务.认为这可以通过Savepoints来完成,但我对它们并不是很熟悉.这是我尝试实现的基本示例.
DECLARE
...
BEGIN
FOR i IN 1 .. 10
LOOP
BEGIN
-- Some DML and stored procs with DML
INSERT INTO a .. .;
INSERT INTO b .. .;
INSERT INTO a .. .;
DELETE FROM a .. .;
UPDATE INTO c .. .;
m_package.some_proc_with_dml;
EXCEPTION
WHEN OTHERS THEN
merror := merror + || ', ' || + sqlerrm;
miserror := TRUE;
END;
END LOOP;
COMMIT;
IF miserror THEN
raise_application_error(-20000, merror);
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
提前致谢.
你可以设置一个 SAVEPOINT,然后回滚到那个SAVEPOINT,例如:
DECLARE
...
BEGIN
FOR i IN 1 .. 10
LOOP
BEGIN
SAVEPOINT my_savepoint_name;
-- Some DML and stored procs with DML
INSERT INTO a .. .;
INSERT INTO b .. .;
INSERT INTO a .. .;
DELETE FROM a .. .;
UPDATE INTO c .. .;
m_package.some_proc_with_dml;
EXCEPTION
WHEN OTHERS THEN
merror := merror + || ', ' || + sqlerrm;
miserror := TRUE;
ROLLBACK TO my_savepoint_name;
END;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3720 次 |
| 最近记录: |