PL-SQL
Oracle PL/SQL Records Type with Examples
What is Record Type? A Record type is a complex data type which allows the programmer to create a...
TCL stands for Transaction Control Statements. It will either save the pending transactions or roll back the pending transaction. These statements play the vital role because unless the transaction is saved the changes through DML statements will not be saved in the database. Below are the different TCL statements.
| COMMIT | Saves all the pending transaction |
| ROLLBACK | Discard all the pending transaction |
| SAVEPOINT | Creates a point in the transaction till which rollback can be done later |
| ROLLBACK TO | Discard all the pending transaction till the specified <save point> |
The transaction will be complete under the following scenarios.
In PL/SQL, all the modifications done on data will be termed as a transaction. A transaction is considered as complete when the save/discard is applied to it. If no save/discard is given, then the transaction will not be considered as complete and the modifications done on the data will not be made permanent on the server.
Irrespective of some modifications done during a session, PL/SQL will treat the whole modification as a single transaction and saving/discard this transaction affects to the entire pending changes in that session. Autonomous Transaction provides a functionality to the developer in which it allows to do changes in a separate transaction and to save/discard that particular transaction without affecting the main session transaction.
Syntax:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; . BEGIN <executin_part> [COMMIT|ROLLBACK] END; /
Example 1: In this example, we are going to understand how the autonomous transaction is working.
DECLARE
l_salary NUMBER;
PROCEDURE nested_block IS
PRAGMA autonomous_transaction;
BEGIN
UPDATE emp
SET salary = salary + 15000
WHERE emp_no = 1002;
COMMIT;
END;
BEGIN
SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001;
dbms_output.put_line('Before Salary of 1001 is'|| l_salary);
SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002;
dbms_output.put_line('Before Salary of 1002 is'|| l_salary);
UPDATE emp
SET salary = salary + 5000
WHERE emp_no = 1001;
nested_block;
ROLLBACK;
SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001;
dbms_output.put_line('After Salary of 1001 is'|| l_salary);
SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002;
dbms_output.put_line('After Salary of 1002 is '|| l_salary);
end;
Output
Before:Salary of 1001 is 15000 Before:Salary of 1002 is 10000 After:Salary of 1001 is 15000 After:Salary of 1002 is 25000
Code Explanation:
What is Record Type? A Record type is a complex data type which allows the programmer to create a...
In this tutorial, you are going to see the detailed description on how to create and execute the...
What is Package in Oracle? PL/SQL package is a logical grouping of a related subprogram...
What is Nested Blocks Oracle? In PL/SQL, each block can be nested into another block. They are...
What is PL/SQL Datatypes? A data type is associated with the specific storage format and range...
What is Dynamic SQL? Dynamic SQL is a programming methodology for generating and running...