Advertisement
adityass

Untitled

May 2nd, 2024
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.27 KB | None | 0 0
  1. -- Create a table
  2. CREATE TABLE Employees (
  3.     emp_id NUMBER PRIMARY KEY,
  4.     emp_name VARCHAR2(100),
  5.     emp_salary NUMBER
  6. );
  7.  
  8. -- Create a sequence to generate employee IDs
  9. CREATE SEQUENCE emp_id_seq START WITH 1 INCREMENT BY 1;
  10.  
  11. -- Create a trigger to automatically assign IDs to new employees
  12. CREATE OR REPLACE TRIGGER emp_id_trigger
  13. BEFORE INSERT ON Employees
  14. FOR EACH ROW
  15. BEGIN
  16.     :NEW.emp_id := emp_id_seq.NEXTVAL;
  17. END;
  18. /
  19.  
  20. -- Function to calculate annual salary
  21. CREATE OR REPLACE FUNCTION calculate_annual_salary(p_monthly_salary IN NUMBER) RETURN NUMBER IS
  22.     v_annual_salary NUMBER;
  23. BEGIN
  24.     v_annual_salary := p_monthly_salary * 12;
  25.     RETURN v_annual_salary;
  26. END calculate_annual_salary;
  27. /
  28.  
  29. -- PL/SQL block with cursor, exception handling, and triggers
  30. DECLARE
  31.     v_total_salary NUMBER := 0;
  32.     v_emp_count NUMBER := 0;
  33.    
  34.     -- Cursor declaration
  35.     CURSOR emp_cursor IS
  36.         SELECT emp_id, emp_name, emp_salary FROM Employees;
  37. BEGIN
  38.     -- Inserting sample data
  39.     INSERT INTO Employees (emp_name, emp_salary) VALUES ('John', 5000);
  40.     INSERT INTO Employees (emp_name, emp_salary) VALUES ('Jane', 6000);
  41.     INSERT INTO Employees (emp_name, emp_salary) VALUES ('Alice', 5500);
  42.    
  43.     -- Implicit cursor loop to fetch employee details
  44.     FOR emp_rec IN emp_cursor LOOP
  45.         -- Displaying employee details
  46.         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));
  47.        
  48.         -- Calculating total salary
  49.         v_total_salary := v_total_salary + emp_rec.emp_salary;
  50.        
  51.         -- Incrementing employee count
  52.         v_emp_count := v_emp_count + 1;
  53.     END LOOP;
  54.    
  55.     -- Displaying total salary and employee count
  56.     DBMS_OUTPUT.PUT_LINE('Total Salary: ' || v_total_salary);
  57.     DBMS_OUTPUT.PUT_LINE('Total Employees: ' || v_emp_count);
  58.    
  59.     -- Exception handling
  60.     IF v_emp_count = 0 THEN
  61.         RAISE_APPLICATION_ERROR(-20001, 'No employees found.');
  62.     END IF;
  63. EXCEPTION
  64.     WHEN NO_DATA_FOUND THEN
  65.         DBMS_OUTPUT.PUT_LINE('No data found.');
  66.     WHEN OTHERS THEN
  67.         DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
  68. END;
  69. /
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement