CCCPaste

1ca4088b9a7be

-- Create a table
CREATE TABLE Employees (
emp_id NUMBER PRIMARY KEY,
emp_name VARCHAR2(100),
emp_salary NUMBER
);

-- Create a sequence to generate employee IDs
CREATE SEQUENCE emp_id_seq START WITH 1 INCREMENT BY 1;

-- Create a trigger to automatically assign IDs to new employees
CREATE OR REPLACE TRIGGER emp_id_trigger
BEFORE INSERT ON Employees
FOR EACH ROW
BEGIN
:NEW.emp_id := emp_id_seq.NEXTVAL;
END;
/

-- Function to calculate annual salary
CREATE OR REPLACE FUNCTION calculate_annual_salary(p_monthly_salary IN NUMBER) RETURN NUMBER IS
v_annual_salary NUMBER;
BEGIN
v_annual_salary := p_monthly_salary * 12;
RETURN v_annual_salary;
END calculate_annual_salary;
/

-- PL/SQL block with cursor, exception handling, and triggers
DECLARE
v_total_salary NUMBER := 0;
v_emp_count NUMBER := 0;

-- Cursor declaration
CURSOR emp_cursor IS
SELECT emp_id, emp_name, emp_salary FROM Employees;
BEGIN
-- Inserting sample data
INSERT INTO Employees (emp_name, emp_salary) VALUES ('John', 5000);
INSERT INTO Employees (emp_name, emp_salary) VALUES ('Jane', 6000);
INSERT INTO Employees (emp_name, emp_salary) VALUES ('Alice', 5500);

-- Implicit cursor loop to fetch employee details
FOR emp_rec IN emp_cursor LOOP
-- Displaying employee details
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_rec.emp_id || ', Name: ' || emp_rec.emp_name || ', Monthly Salary: ' || emp_rec.emp_salary || ', Annual Salary: ' || calculate_annual_salary(emp_rec.emp_salary));

-- Calculating total salary
v_total_salary := v_total_salary + emp_rec.emp_salary;

-- Incrementing employee count
v_emp_count := v_emp_count + 1;
END LOOP;

-- Displaying total salary and employee count
DBMS_OUTPUT.PUT_LINE('Total Salary: ' || v_total_salary);
DBMS_OUTPUT.PUT_LINE('Total Employees: ' || v_emp_count);

-- Exception handling
IF v_emp_count = 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'No employees found.');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END;
/