sidrs

DBMSL Ass 6 - Cursor

Sep 15th, 2025
900
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.14 KB | None | 0 0
  1. SET SERVEROUTPUT ON;
  2.  
  3. CREATE TABLE O_RollCall (
  4.     roll    NUMBER          PRIMARY KEY,
  5.     name    VARCHAR2(100),
  6.     dept    VARCHAR2(50)
  7. );
  8.  
  9. CREATE TABLE N_RollCall (
  10.     roll    NUMBER          PRIMARY KEY,
  11.     name    VARCHAR2(100),
  12.     dept    VARCHAR2(50)
  13. );
  14.  
  15. INSERT INTO O_RollCall VALUES (1, 'Adam Jacobs', 'CS');
  16. INSERT INTO O_RollCall VALUES (2, 'Meredith Kosinski', 'EE');
  17. INSERT INTO O_RollCall VALUES (3, 'Charlie Kirk', 'Civil');
  18. INSERT INTO O_RollCall VALUES (4, 'Clark Kent', 'Mech');
  19. INSERT INTO O_RollCall VALUES (5, 'Mike Dean', 'EE');
  20. INSERT INTO O_RollCall VALUES (6, 'Alex Smith', 'Physics');
  21.  
  22. INSERT INTO N_RollCall VALUES (7, 'Brian Johnson', 'Math');
  23. INSERT INTO N_RollCall VALUES (8, 'Jude Law', 'Chemical');
  24. INSERT INTO N_RollCall VALUES (9, 'Teresa Engel', 'CS');
  25. INSERT INTO N_RollCall VALUES (10, 'Dakota Johnson', 'CS');
  26. INSERT INTO N_RollCall VALUES (11, 'Brandon Steel', 'Chemical');
  27. INSERT INTO N_RollCall VALUES (12, 'Hugh Gass', 'Aerospace');
  28. INSERT INTO N_RollCall VALUES (2, 'Meredith Kosinski', 'EE');
  29. INSERT INTO N_RollCall VALUES (4, 'Clark Kent', 'Mech');
  30.  
  31. DECLARE
  32.     CURSOR MyCursor (p_roll NUMBER) IS
  33.         SELECT roll, name, dept
  34.         FROM N_RollCall
  35.         WHERE roll = p_roll;
  36.        
  37.     v_roll NUMBER;
  38.     v_name VARCHAR2(100);
  39.     v_dept VARCHAR2(100);
  40.     v_exists NUMBER := 0;
  41.    
  42. BEGIN
  43.     FOR rec IN (SELECT roll, name, dept FROM N_RollCall) LOOP    
  44.         OPEN MyCursor(rec.roll);
  45.         FETCH MyCursor INTO v_roll, v_name, v_dept;
  46.        
  47.         IF MyCursor%FOUND THEN
  48.             SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END
  49.                 INTO v_exists FROM O_RollCall WHERE roll = rec.roll;          
  50.             IF v_exists = 1 THEN
  51.                 DBMS_OUTPUT.PUT_LINE('Roll: ' || rec.roll || ' already exists. Skipping...');
  52.             ELSE
  53.                 INSERT INTO O_RollCall VALUES (rec.roll, rec.name, rec.dept);
  54.                 DBMS_OUTPUT.PUT_LINE('Roll: ' || rec.roll || ' Name: ' || rec.name || ' inserted');
  55.             END IF;      
  56.         END IF;
  57.        
  58.         CLOSE MyCursor;
  59.     END LOOP;
  60. END;
  61.  
  62.  
  63. SELECT * FROM O_RollCall;
  64.  
  65.  
  66.  
Advertisement
Add Comment
Please, Sign In to add comment