2016-03-21 3 views

Antwort

0

Nicht an sich. Mit Autocommit auf der einzelnen SQL-Anweisung bildet eine Transaktion und wird nach Abschluss verpflichtet/Rollback. Ein Block bildet eine Aggregation von Anweisungen. Wenn Sie eine der Anweisungen eines Blocks nicht erfolgreich ausgeführt haben, wurden die Statements (innerhalb des Blocks) noch ausgeführt (und committed).

Wenn Sie möchten, dass eine Gruppe von Anweisungen sich transaktional verhält, müssen Sie "BEGIN [TRANSACTION] ... COMMIT/ROLLBACK" verwenden und die Fehlerbehandlung entsprechend Ihren Anforderungen durchführen.

1

Nein. Sie haben die Möglichkeit, einen bestimmten Satz von Anweisungen rückgängig zu machen, wenn eine Ausnahme oder ein Fehler auftritt. Sie können

SAVEPOINT savepoint_name; 
ROLLBACK TO savepoint_name; 

einen SAVEPOINT vor dem Block, bis die Sie Rollback möchten erstellen verwenden. SAVEPOINT benennt und markiert den aktuellen Punkt in der Verarbeitung einer Transaktion. Mit Sicherungspunkten können Sie einen Teil einer Transaktion anstelle der gesamten Transaktion zurücksetzen. Die Anzahl der aktiven Sicherungspunkte für jede Sitzung ist unbegrenzt.

Beispiel:

BEGIN 
-- other DML statements 
SAVEPOINT do_insert; 
    INSERT INTO emp_name VALUES (emp_id, emp_lastname, emp_salary); 
EXCEPTION 
    WHEN DUP_VAL_ON_INDEX THEN 
     ROLLBACK TO do_insert; 
     DBMS_OUTPUT.PUT_LINE('Insert has been rolled back'); 
END; 

SAVEPOINT

Verwandte Themen