PL/SQL (Procedural Language/Structured Query Language) is Oracle Corporation’s procedural extension to SQL.
DECLARE
-- Declaration of variables and constants
v_employee_id NUMBER := 100;
v_salary NUMBER;
BEGIN
-- Executable statements
SELECT salary INTO v_salary FROM employees WHERE employee_id = v_employee_id;
IF v_salary < 5000 THEN
UPDATE employees SET salary = salary * 1.1 WHERE employee_id = v_employee_id;
END IF;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee not found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred');
END;
IF...THEN...ELSEFOR, WHILE, LOOP...EXIT WHENUsed to fetch multiple rows one at a time.
Types:
DECLARE
CURSOR emp_cursor IS SELECT employee_id, salary FROM employees WHERE department_id = 10;
v_employee_id employees.employee_id%TYPE;
v_salary employees.salary%TYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO v_employee_id, v_salary;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Employee: ' || v_employee_id || ', Salary: ' || v_salary);
END LOOP;
CLOSE emp_cursor;
END;
CREATE OR REPLACE PROCEDURE increase_salary (p_emp_id IN NUMBER, p_increment IN NUMBER) IS
BEGIN
UPDATE employees SET salary = salary + p_increment WHERE employee_id = p_emp_id;
COMMIT;
END;
Special PL/SQL blocks executed automatically on certain events:
INSERT, UPDATE, or DELETECREATE OR REPLACE TRIGGER trg_salary_check
BEFORE UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
IF :NEW.salary < 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'Salary cannot be negative');
END IF;
END;
NO_DATA_FOUND, TOO_MANY_ROWS)RAISE and EXCEPTION blocks.| Topic | Description |
|---|---|
| PL/SQL | Procedural extension of SQL |
| Blocks | Declare, Execute, Exception sections |
| Variables | Hold data for processing |
| Control Structures | Conditional and loops |
| Cursors | Process multiple rows |
| Procedures/Functions | Modular code blocks |
| Triggers | Automatic event-driven code |
| Exception Handling | Error management |
Open this section to load past papers