sidrs

DBMSL Ass 5 - Named Block (Proc and Func)

Sep 8th, 2025
744
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 1.49 KB | None | 0 0
  1. SET SERVEROUTPUT ON;
  2.  
  3. CREATE TABLE STUD_MARKS (
  4.     roll            NUMBER              PRIMARY KEY,
  5.     name            VARCHAR2(100),
  6.     total_marks     NUMBER
  7. );
  8.  
  9. CREATE TABLE RESULTS (
  10.     roll            NUMBER              PRIMARY KEY,
  11.     name            VARCHAR2(100),
  12.     class           VARCHAR2(50),
  13.     CONSTRAINT fk_results_studmarks FOREIGN KEY (roll) REFERENCES STUD_MARKS(roll)
  14. );
  15.  
  16. CREATE OR REPLACE PROCEDURE proc_grade (p_roll IN NUMBER, p_name IN VARCHAR2, p_marks IN NUMBER)
  17. IS
  18.     v_class VARCHAR2(30);
  19. BEGIN
  20.     IF p_marks BETWEEN 990 AND 1500 THEN
  21.         v_class := 'Distinction';
  22.     ELSIF p_marks BETWEEN 900 AND 989 THEN
  23.         v_class := 'First Class';
  24.     ELSIF p_marks BETWEEN 825 AND 899 THEN
  25.         v_class := 'Higher Second Class';
  26.     ELSE
  27.         v_class := 'NA';
  28.     END IF;
  29.        
  30.     INSERT INTO RESULTS (roll, name, class)
  31.     VALUES (p_roll, p_name, v_class);
  32.    
  33.     DBMS_OUTPUT.PUT_LINE('Roll: ' || p_roll || ', Name: ' || p_name || ', Class: ' || v_class);
  34. END;
  35.  
  36. CREATE TRIGGER trg_compute_grade
  37. AFTER INSERT ON STUD_MARKS
  38. FOR EACH ROW
  39. BEGIN
  40.     proc_grade(:NEW.roll, :NEW.name, :NEW.total_marks);
  41. END;
  42.  
  43. INSERT INTO STUD_MARKS (roll, name, total_marks) VALUES (1, 'Adam', 995);
  44. INSERT INTO STUD_MARKS (roll, name, total_marks) VALUES (2, 'Bob', 910);
  45. INSERT INTO STUD_MARKS (roll, name, total_marks) VALUES (3, 'Charles', 870);
  46. INSERT INTO STUD_MARKS (roll, name, total_marks) VALUES (4, 'Daniel', 800);
  47.  
  48. SELECT * FROM RESULTS;
  49.  
Advertisement
Add Comment
Please, Sign In to add comment