PL / SQL-트랜잭션

이 장에서는 PL / SQL의 트랜잭션에 대해 설명합니다. 데이터베이스transaction하나 이상의 관련 SQL 문으로 구성 될 수있는 원자 적 작업 단위입니다. 트랜잭션을 구성하는 SQL 문에 의해 발생하는 데이터베이스 수정이 집합 적으로 커밋 될 수 있기 때문에 원 자성이라고합니다. 즉, 데이터베이스에 영구적으로 만들거나 데이터베이스에서 롤백 (취소) 할 수 있습니다.

성공적으로 실행 된 SQL 문과 커밋 된 트랜잭션은 동일하지 않습니다. SQL 문이 성공적으로 실행 된 경우에도 해당 문이 포함 된 트랜잭션이 커밋되지 않으면 롤백 할 수 있으며 문에 의한 모든 변경 사항을 취소 할 수 있습니다.

거래 시작 및 종료

거래에는 beginning 그리고 end. 다음 이벤트 중 하나가 발생하면 트랜잭션이 시작됩니다.

  • 첫 번째 SQL 문은 데이터베이스에 연결 한 후 수행됩니다.

  • 트랜잭션이 완료된 후 발행 된 각각의 새 SQL 문에서.

다음 이벤트 중 하나가 발생하면 트랜잭션이 종료됩니다.

  • COMMIT 또는 ROLLBACK 명세서가 발행됩니다.

  • DDL 다음과 같은 진술 CREATE TABLE성명서가 발행됩니다. 이 경우 COMMIT가 자동으로 수행되기 때문입니다.

  • DCL 문과 같은 GRANT성명서가 발행됩니다. 이 경우 COMMIT가 자동으로 수행되기 때문입니다.

  • 사용자가 데이터베이스에서 연결을 끊습니다.

  • 사용자 종료 SQL*PLUS 발행함으로써 EXIT 명령을 내리면 COMMIT가 자동으로 수행됩니다.

  • SQL * Plus가 비정상적으로 종료됩니다. ROLLBACK 자동으로 수행됩니다.

  • DML문이 실패합니다. 이 경우 해당 DML 문을 실행 취소하기 위해 ROLLBACK이 자동으로 수행됩니다.

트랜잭션 커밋

트랜잭션은 SQL 명령 COMMIT를 실행하여 영구적으로 만듭니다. COMMIT 명령의 일반적인 구문은 다음과 같습니다.

COMMIT;

예를 들면

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (6, 'Komal', 22, 'MP', 4500.00 ); 

COMMIT;

트랜잭션 롤백

COMMIT없이 데이터베이스에 대한 변경은 ROLLBACK 명령을 사용하여 취소 할 수 있습니다.

ROLLBACK 명령의 일반 구문은 다음과 같습니다.

ROLLBACK [TO SAVEPOINT < savepoint_name>];

시스템 장애와 같은 전례없는 상황으로 인해 트랜잭션이 중단되면 커밋 이후 전체 트랜잭션이 자동으로 롤백됩니다. 사용하지 않는 경우savepoint, 다음 명령문을 사용하여 모든 변경 사항을 롤백하십시오.

ROLLBACK;

세이브 포인트

세이브 포인트는 체크 포인트를 설정하여 긴 트랜잭션을 더 작은 단위로 분할하는 데 도움이되는 일종의 마커입니다. 긴 트랜잭션 내에서 저장 점을 설정하여 필요한 경우 체크 포인트로 롤백 할 수 있습니다. 이것은SAVEPOINT 명령.

SAVEPOINT 명령의 일반 구문은 다음과 같습니다.

SAVEPOINT < savepoint_name >;

예를 들면

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 ); 

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 ); 
SAVEPOINT sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000; 
ROLLBACK TO sav1;
  
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 7; 
UPDATE CUSTOMERS 
SET SALARY = SALARY + 1000 
WHERE ID = 8; 

COMMIT;

ROLLBACK TO sav1 −이 명령문은 저장 점 sav1을 표시 한 지점까지 모든 변경 사항을 롤백합니다.

그 후에 새로운 변경 사항이 시작됩니다.

자동 거래 제어

실행하려면 COMMIT 자동으로 INSERT, UPDATE 또는 DELETE 명령이 실행되면 다음을 설정할 수 있습니다. AUTOCOMMIT 환경 변수-

SET AUTOCOMMIT ON;

다음 명령을 사용하여 자동 커밋 모드를 끌 수 있습니다.

SET AUTOCOMMIT OFF;