2014-12-31 3 views
0

Как я могу сделать много заявление, в одной и той же сделки:Многие Заявление в одной транзакции PLSQL

update .....;--s1 
update .....;--s2 
update .....;--s3 
COMMIT; 

если ошибка произойдет в s2 s1 отката, если ошибка происходит в s3 Откат s2 и s1;

+1

Вы должны использовать 'анонимного block' с' EXCEPTION' Обработкой – Exhausted

+0

Если вы используете '' sqlplus' использовать всякий раз, когда SQLError rollback' в начале сценария –

+0

@a_horse_with_no_name Нет я использовать жаба для оракула –

ответ

2

Вы можете сделать обработку исключений, как это:

BEGIN 
    update .....;--s1 
    update .....;--s2 
    update .....;--s3 
    COMMIT; 
EXCEPTION 
    WHEN OTHERS THEN 
    ROLLBACK; 
END; 
+1

недопустимого синтаксиса. Вместо этого см. Ответ @sylvainleroux. – user272735

+0

@ user272735 Я исправил синтаксис, я не могу удалить ответ, поскольку он был принят. – Donal

3

AFAIK, правильный синтаксис в PL/SQL для отката в случае исключения является:

begin 
    -- stmt1 
    -- stmt2 
    -- stmt3 
    commit; 
exception 
    when others then -- <-- 
    rollback; 
end; 

КСТАТИ нет такого вещь как AUTOCOMMIT в PL/SQL. Это команда SQL * Plus.

+1

Это правильный ответ, несмотря на то, что голоса и то, что ОП отметили как правильные. – user272735

Смежные вопросы