PL/SQL Instead of Triggers
Last Updated :
13 Sep, 2024
PL/SQL INSTEAD OF Triggers are a special type of trigger used primarily with views to allow operations like INSERT, UPDATE, and DELETE.
These triggers provide a way to perform complex operations that might not be possible directly on a view, enabling you to maintain data integrity and enforce business rules. In this article, We will learn about the INSTEAD OF trigger in PL/SQL by understanding various examples.
INSTEAD OF Trigger in PL/SQL
PL/SQL procedures offer control over database operations, allowing tasks to be executed at specific times. This approach integrates directly into application logic, providing more flexibility than automatic triggers.
Syntax of the INSTEAD OF Trigger:
CREATE OR REPLACE TRIGGER trigger_name
INSTEAD OF {INSERT | UPDATE | DELETE}
ON view_name
[FOR EACH ROW]
BEGIN
EXCEPTION
END;
Parameters:
- trigger_name: The name of the trigger being created (e.g., employee_view_trigger).
- {INSERT | UPDATE | DELETE}: Specifies which type of DML operation the trigger will handle (e.g., INSERT, UPDATE, DELETE).
- view_name: The name of the view on which the trigger is defined (e.g., employee_view).
Using the INSTEAD OF Trigger in PL/SQL
The INSTEAD OF trigger can be used in various PL/SQL operations to filter records. Below are examples demonstrating its use in INSERT, UPDATE, and DELETE statements.
Step 1: First, create the employees and departments tables
CREATE TABLE departments (
department_id NUMBER PRIMARY KEY,
department_name VARCHAR2(50)
);
CREATE TABLE employees (
employee_id NUMBER PRIMARY KEY,
name VARCHAR2(50),
department_id NUMBER,
CONSTRAINT fk_department
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);
Step 2: Next, insert some data into these tables
INSERT INTO departments (department_id, department_name) VALUES (1, 'HR');
INSERT INTO departments (department_id, department_name) VALUES (2, 'IT');
INSERT INTO departments (department_id, department_name) VALUES (3, 'Finance');
INSERT INTO employees (employee_id, name, department_id) VALUES (101, 'Alice', 1);
INSERT INTO employees (employee_id, name, department_id) VALUES (102, 'Bob', 2);
INSERT INTO employees (employee_id, name, department_id) VALUES (103, 'Charlie', 3);
Step 3: Now, create a view that joins the employees and departments tables
CREATE VIEW employee_details AS
SELECT e.employee_id, e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
Step 4: To allow INSERT operations on the employee_details view, we create an INSTEAD OF trigger
CREATE OR REPLACE TRIGGER emp_details_insert_trigger
INSTEAD OF INSERT ON employee_details
FOR EACH ROW
BEGIN
INSERT INTO employees (employee_id, name, department_id)
VALUES (:NEW.employee_id, :NEW.name,
(SELECT department_id FROM departments WHERE department_name = :NEW.department_name));
END;
Example 1: Inserting a New Employee into the HR Department
INSERT INTO employee_details (employee_id, name, department_name)
VALUES (104, 'David', 'HR');
Output:
Employee ID | Name | Department ID | Department Name |
---|
104 | David | 1 | HR |
Explanation: The trigger successfully maps 'HR' to department_id 1 and inserts the new employee, David, into the employees table.
Example 2: Inserting a New Employee into the IT Department
INSERT INTO employee_details (employee_id, name, department_name)
VALUES (105, 'Eva', 'IT');
Output:
Employee ID | Name | Department ID | Department Name |
---|
105 | Eva | 2 | IT |
Explanation: Eva is added to the employees table with the correct department_id for the IT department.
Example 3: Inserting a New Employee into the Finance Department
INSERT INTO employee_details (employee_id, name, department_name)
VALUES (106, 'Frank', 'Finance');
Output:
Employee ID | Name | Department ID | Department Name |
---|
106 | Frank | 3 | Finance |
Explanation: Frank is inserted into the employees table with the corresponding department_id for Finance.
Conclusion
PL/SQL INSTEAD OF triggers are a way to manage changes in database views that normally can’t be updated directly. These triggers let you control on data how you added data, changed, or removed, ensuring everything stays accurate and follows your business rules. By using INSTEAD OF triggers, you can make your database more flexible and work smoothly, even with complex views. This makes it easier to keep your data organized and reliable.
Similar Reads
PL/SQL Drop Triggers In database management, triggers play an important role in maintaining data integrity and enforcing business rules automatically. However, there may be situations where we need to remove an existing trigger from a database. This process is accomplished using the DROP TRIGGER statement in PL/SQL.In t
4 min read
PL/SQL Disable Triggers Triggers in PL/SQL are designed to automatically perform actions in response to specific events on a table, such as INSERT, UPDATE, or DELETE. However, there are times when you may need to temporarily disable these triggers, To perform updates or to speed up large data imports. In this article, We w
4 min read
PL/SQL Enable Triggers In PL/SQL, triggers are special stored procedures that automatically execute in response to certain events on a particular table or view. These triggers can be used to enforce complex business rules, maintain integrity constraints, or track changes in the database. However, triggers can be enabled o
6 min read
PL/SQL Triggers PL/SQL stands for Procedural Language/ Structured Query Language. It has block structure programming features.PL/SQL supports SQL queries. It also supports the declaration of the variables, control statements, Functions, Records, Cursor, Procedure, and Triggers.PL/SQL contains a declaration section,
6 min read
MySQL DROP Trigger In MySQL, triggers automatically perform actions when events like INSERT, UPDATE, or DELETE occur on a table However, there are situations where a trigger may not be necessary and its logic may need to be updated. In such cases, MySQL provides the DROP TRIGGER statement to delete an existing trigger
4 min read