Exp-1 (TCL)
Exp-1 (TCL)
EXP-2 (DCL)
CREATE TABLE Employee (
e_id INT,
e_name VARCHAR(20),
e_dept VARCHAR(20),
salary INT
);
INSERT INTO Employee (e_id, e_name, e_dept, salary) VALUES
(1, 'A', 'HR', 200000),
(2, 'B', 'Financial', 100000),
(3, 'C', 'HR', 50000),
(4, 'D', 'Financial', 80000);
EXP-3 (LOCKS)
USE kings;
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(100),
hostel_id INT
);
INSERT INTO students (student_id, student_name, hostel_id) VALUES
(1, 'King', 1),
(2, 'Queen', 2),
(3, 'Warrior', 3);
-- Row-Level Lock
START TRANSACTION;
SELECT * FROM students WHERE student_id = 1 FOR UPDATE;
UPDATE students SET student_name = 'King Updated' WHERE student_id =
1;
COMMIT;
-- Exclusive Lock
START TRANSACTION;
LOCK TABLES students WRITE;
UPDATE students SET student_name = 'Queen Updated' WHERE student_id =
2;
UNLOCK TABLES;
COMMIT;
-- Shared Lock
START TRANSACTION;
SELECT * FROM students WHERE student_id = 1 LOCK IN SHARE MODE;
COMMIT;
-- 3. Create Tables
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT
);
DECLARE
v_emp_id employees.emp_id%TYPE;
v_emp_name employees.emp_name%TYPE;
v_bonus employees.bonus%TYPE;
v_sales_total NUMBER := 0;
BEGIN
FOR employee IN (SELECT emp_id, emp_name, bonus FROM employees)
LOOP
v_emp_id := employee.emp_id;
v_emp_name := employee.emp_name;
v_bonus := employee.bonus;
SELECT SUM(sale_amount)
INTO v_sales_total
FROM sales
WHERE emp_id = v_emp_id;
UPDATE employees
SET bonus = v_bonus
WHERE emp_id = v_emp_id;
COMMIT;
END;
/
DECLARE
-- explicit cursor
CURSOR employee_cursor IS
SELECT emp_id, emp_name, bonus
FROM employees;
v_emp_id employees.emp_id%TYPE;
v_emp_name employees.emp_name%TYPE;
v_bonus employees.bonus%TYPE;
BEGIN
-- Open the cursor
OPEN employee_cursor;
LOOP
FETCH employee_cursor INTO v_emp_id, v_emp_name, v_bonus;
EXIT WHEN employee_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_emp_id || ' | Name: ' ||
v_emp_name || ' | Bonus: ' || v_bonus);
END LOOP;
CLOSE employee_cursor;
END;
/
EXP-7 (Exceptions)
DECLARE
--user-defined exception
low_bonus_exception EXCEPTION;
v_emp_id employees.emp_id%TYPE := 1;
v_emp_name employees.emp_name%TYPE := 'King';
v_bonus employees.bonus%TYPE := 400;
BEGIN
IF v_bonus < 500 THEN
-- Raise the user-defined exception
RAISE low_bonus_exception;
END IF;
BEGIN
INSERT INTO employees (emp_id, emp_name, bonus)
VALUES (v_emp_id, v_emp_name, v_bonus);
COMMIT;
DBMS_OUTPUT.PUT_LINE('Employee inserted successfully!');
EXCEPTION
-- Exception handling for unique constraint violation (duplicate emp_id)
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('Error: Employee with ID ' || v_emp_id || '
already exists.');
-- User-defined exception
WHEN low_bonus_exception THEN
DBMS_OUTPUT.PUT_LINE('Error: Employee bonus is too low. It must
be at least 500.');