Oracle 计算表中的记录并使用游标更新表

Oracle 计算表中的记录并使用游标更新表,oracle,Oracle,我在Oracle中有以下表格: Teacher id_teacher (pk) number_courses Course id_course (pk) id_teacher (fk) 我想创建一个光标,通过计算老师分配到的课程,从教师表中更新课程数字段。就我所知,我应该首先声明如下游标: cursor c_teacher IS select id_teacher from teacher; 然后做一个for循环,迭代这个游标的结果,计算指定的课程,我的解决方案草案是: d

我在Oracle中有以下表格:

Teacher
id_teacher (pk)
number_courses

Course
id_course (pk)
id_teacher (fk)
我想创建一个光标,通过计算老师分配到的课程,从
教师
表中更新
课程数
字段。就我所知,我应该首先声明如下游标:

cursor c_teacher IS
        select id_teacher from teacher;
然后做一个for循环,迭代这个游标的结果,计算指定的课程,我的解决方案草案是:

declare
  countC number(2);
    cursor c_teacher IS
        select id_teacher from teacher;
begin
    for data in c_teacher
    loop
        select count(id_teacher) into countC from Course where id_teacher=data;
        --I can output here with a DMBS_OUTPUT only to see if its working, but
        --I need to use an UPDATE instruction
    end loop;
end;
不要使用光标。(除非这是对你面临的实际问题的戏剧性简化。或者这是一个考虑不周的家庭作业问题。在这种情况下,秘密是)

具有相关子查询的单个update语句将完成此任务:

update Teachers T
set number_courses = (select count(*)
    from Courses C
    where C.id_teacher = T.id_teacher);
由于这些值不能不同步,因此可能更好的方法是不将课程数存储在教师表中,并在需要时计算正确的值:

alter table Teachers drop column number_courses;

create view Teachers_VW as
select T.id_teacher
    , count(*) as number_courses
from Teachers T
left outer join Courses C on C.id_teacher = T.id_teacher
group by T.id_teacher;