Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. CREATE TABLE dept
  2. (dept_id number not null CONSTRAINT dept_pk PRIMARY KEY);
  3.  
  4. CREATE TABLE student
  5. (s_id number not null CONSTRAINT student_pk PRIMARY KEY,
  6. dept_id number not null,
  7. CONSTRAINT dept_fk_student FOREIGN KEY (dept_id) REFERENCES dept(dept_id));
  8.  
  9. CREATE TABLE teacher
  10. (t_id number not null CONSTRAINT teacher_pk PRIMARY KEY,
  11. dept_id number not null,
  12. CONSTRAINT dept_fk_teacher FOREIGN KEY (dept_id) REFERENCES dept(dept_id));
  13.  
  14. CREATE TABLE course
  15. (code number not null CONSTRAINT course_pk PRIMARY KEY,
  16. credit number not null,
  17. dept_id number not null,
  18. CONSTRAINT dept_fk_course FOREIGN KEY (dept_id) REFERENCES dept(dept_id));
  19.  
  20. CREATE TABLE result
  21. (s_id number not null,
  22. t_id number not null,
  23. code number not null,
  24. semester varchar2(10) not null,
  25. ct number,
  26. mid number,
  27. final number,
  28. attend number,
  29. CONSTRAINT student_fk_result FOREIGN KEY (s_id) REFERENCES student(s_id),
  30. CONSTRAINT teacher_fk_result FOREIGN KEY (t_id) REFERENCES teacher(t_id),
  31. CONSTRAINT course_fk_result FOREIGN KEY (code) REFERENCES course(code));
  32.  
  33. CREATE TABLE grade
  34. (grad varchar2(2),
  35. start_marks number,
  36. end_marks number,
  37. gp float);
  38.  
  39. INSERT ALL
  40. INTO grade (grad, start_marks, end_marks, gp) VALUES('A+',80,100,4)
  41. INTO grade (grad, start_marks, end_marks, gp) VALUES('A',75,79,3.75)
  42. INTO grade (grad, start_marks, end_marks, gp) VALUES('A-',70,74,3.50)
  43. INTO grade (grad, start_marks, end_marks, gp) VALUES('B+',65,69,3.25)
  44. INTO grade (grad, start_marks, end_marks, gp) VALUES('B',60,64,3.00)
  45. INTO grade (grad, start_marks, end_marks, gp) VALUES('B-',55,59,2.75)
  46. INTO grade (grad, start_marks, end_marks, gp) VALUES('C+',50,54,2.50)
  47. INTO grade (grad, start_marks, end_marks, gp) VALUES('C',45,49,2.25)
  48. INTO grade (grad, start_marks, end_marks, gp) VALUES('D',40,44,2.00)
  49. INTO grade (grad, start_marks, end_marks, gp) VALUES('F',0,39,0.00)
  50. SELECT * FROM dual;
  51.  
  52. CREATE TABLE f_result
  53. (s_id number,
  54. code number,
  55. semester varchar2(10),
  56. total_marks number,
  57. grad varchar2(2),
  58. gpa float);
  59.  
  60.  
  61. CREATE OR REPLACE TRIGGER restrict_f_result
  62. BEFORE INSERT OR UPDATE OR DELETE ON f_result
  63. BEGIN
  64. RAISE_APPLICATION_ERROR(-006,'You can not update/insert/delete the f_result table');
  65. end;
  66. /
  67.  
  68.  
  69.  
  70. CREATE OR REPLACE TRIGGER restrict_result_crt1
  71. AFTER INSERT ON result
  72. for each row
  73. DECLARE
  74. vtotal number;
  75. vs_id number;
  76. vcode number;
  77. vsemester varchar2(10);
  78. vgrad varchar2(2);
  79. vgp float;
  80. vcredit number;
  81. vgpa float;
  82. vt_id number;
  83. BEGIN
  84. vcode:=:new.code;
  85. vs_id:=:new.s_id;
  86. vtotal:= :new.ct + :new.mid + :new.final + :new.attend;
  87. vsemester:= :new.semester;
  88. SELECT gp,grad
  89. INTO vgp,vgrad FROM grade
  90. WHERE vtotal>=start_marks AND vtotal <=end_marks;
  91. SELECT credit INTO vcredit FROM course WHERE code=vcode;
  92. vgpa:=vgp*vcredit;
  93. INSERT INTO f_result(s_id, code, semester, total_marks,grad,gpa)
  94. VALUES (vs_id,vcode,vsemester,vtotal,vgrad,vgpa);
  95. end;
  96. /
  97.  
  98. CREATE OR REPLACE TRIGGER restrict_result_crt2
  99. AFTER UPDATE ON result
  100. for each row
  101. DECLARE
  102. vtotal number;
  103. vs_id number;
  104. vcode number;
  105. vsemester varchar2(10);
  106. vgrad varchar2(2);
  107. vgp float;
  108. vcredit number;
  109. vgpa float;
  110. vt_id number;
  111. BEGIN
  112. vcode:=:new.code;
  113. vs_id:=:new.s_id;
  114. vtotal:=:new.ct + :new.mid + :new.final + :new.attend;
  115. vsemester:=:new.semester;
  116. SELECT gp,grad
  117. INTO vgp,vgrad FROM grade
  118. WHERE vtotal>=start_marks AND vtotal<=end_marks;
  119. SELECT credit INTO vcredit FROM course WHERE code=vcode;
  120. vgpa:=vgp*vcredit;
  121. UPDATE f_result
  122. SET code=vcode, semester=vsemester, total_marks=vtotal,grad=vgrad,gpa=vgpa
  123. WHERE s_id=vs_id;
  124. end;
  125. /
  126.  
  127. CREATE OR REPLACE TRIGGER restrict_result_crt3
  128. Before DELETE ON result
  129. for each row
  130. DECLARE
  131. vs_id number;
  132. BEGIN
  133. vs_id:=:new.s_id;
  134. delete from f_result where s_id=vs_id;
  135. end;
  136. /
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154. insert into dept(dept_id) values (2345);
  155. insert into student(s_id,dept_id) values (201720,2345);
  156. insert into teacher(t_id,dept_id) values (1017,2345);
  157. insert into course(code,credit,dept_id) values (201,3,2345);
  158. insert into result(s_id, t_id, code, semester, ct, mid, final, attend)
  159. values (201720,1017,201,'summer', 10, 15, 35, 8);
  160.  
  161. update result set ct=10, mid=15, final=49, attend=8 where s_id=201720;
  162.  
  163. insert into f_result(s_id) values (201720);
  164. drop trigger restrict_f_result;
  165.  
  166. select * from f_result;
  167.  
  168. system.trg is invalid and failed re-validation
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement