问题: 有三个角色。 1)学生2)助教(TA)3)老师。学生和助教可以是同一个人,但角色不同。学生和教师都有一个名为unity id的唯一ID。他们是课程表中的各种课程,学生可以参加,TA可以协助。他们是与每门课程相关的各种主题,可以在多个课程中出现。主题出现在不同的表格中。 规则: 1)TA不能协助他/她是学生的课程。 2)通知已发送给正在参加课程的教师。
要求:每当TA注册(填写在“TA”表中)时,如果TA和学生的主题相同,我们必须向教师发送通知(Course_roster表中的Cid对应于TOPICS表中的主题)重叠。
所以,我创建了一个Notification表,当触发器触发时会填充该表。此外,我创建了一个触发器,我已经搞砸了,因为我第一次做PL / SQL。
我附加了来自TA表,Course_roster表,主题表和通知表布局的样本数据
Course_Roster Table
CID unityid
CSC440FALL14 tregan
CSC440FALL14 mfiser
CSC440FALL14 jander
CSC440FALL14 mjones
CSC540FALL14 aneela
CSC540FALL14 mjones
CSC540FALL14 jmick
CSC540FALL14 tregan
TA Table
CID unityid
CSC440FALL14 aneela
CSC440FALL14 jmick
CSC540FALL14 jharla
CSC541FALL14 jmoyer
Topics Table
CID TID Topic Name
CSC440FALL14 100 Introduction to database design
CSC440FALL14 101 SQL:Queries, Constraints,Triggers
CSC540FALL14 500 Introduction to database design
CSC540FALL14 501 Storing data: Disks and Files
CSC540FALL14 502 Primary File Organizations
CSC540FALL14 503 Tree Structures
CSC541FALL14 502 Primary File Organizations
CSC541FALL14 503 Tree Structures
Notification table
t_unityid text s_unityid timestamp
CREATE OR REPLACE TRIGGER tr_TA
AFTER
INSERT OR UPDATE
ON TA
FOR EACH ROW
BEGIN
DECLARE tid1 dbms_sql.number_table;
DECLARE tid2 dbms_sql.number_table;
DECLARE tid3 dbms_sql.number_table;
DECLARE @unityid varchar2;
DECLARE @unityid2 varchar2;
Select @unityid= unityid from inserted
Select @unityid2=unityid from COURSES Where COURSES.CID=inserted.CID
Select tid1=t.TID from TOPICS t,COURSE_ROSTER c where t.CID=c.CID and c.UNITYID=UNITYID
Select tid2=t.TID from TOPICS t,inserted where t.CID=inserted.CID
tid3 := tid2 multiset intersect tid1;
IF tid3.Count > 0
insert into notification (unityid, notice, ta_unityid)
values(@unityid2, 'Subject topic of TA is matching with course topics taken.',@unityid)
ELSE
PRINT 'TA ok to register'
END
代码中有很多错误,因为我不知道代码的去向。我非常感谢帮助让我通过。提前谢谢。