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
PL/SQL Row-Level Triggers
In PL/SQL, triggers are special stored procedures that automatically execute in response to specific events on a table or view. Among these, row-level triggers are particularly useful for enforcing business rules, maintaining data integrity, and automating tasks. This article explores row-level trig
5 min read
PL/SQL Nested Table
PL/SQL, Oracle's procedural extension of SQL, offers powerful capabilities for managing and processing data within the database. One of its key features is support for complex data structures, including collections like nested tables. A nested table in PL/SQL is a dynamic, array-like data structure
5 min read
SQL Triggers
SQL triggers are essential in database management systems (DBMS). They enable SQL statements to run when specific database events occur such as when someone adds, changes, or removes data. Triggers are commonly used to maintain data integrity, track changes, and apply business rules automatically, w
8 min read
MySQL After Insert Trigger
An "AFTER INSERT" trigger in MySQL automatically executes specified actions after a new row is inserted into a table. It is used to perform tasks such as updating related tables, logging changes or performing calculations, ensuring immediate and consistent data processing.In this article, We will le
4 min read
MySQL AFTER DELETE Trigger
In MySQL, triggers are a concept where SQL developers can define automatic actions to occur in response to specific changes in a database table. An AFTER DELETE trigger, for instance, is invoked automatically after a row is deleted from a table, allowing developers to perform additional operations s
4 min read