更新每个循环的游标中的记录

时间:2018-02-15 18:24:41

标签: sql oracle

我想更新所有学生记录的teacher_id(来自1st的记录)     使用第二个select语句中的new teacher_id选择语句。我在用     下面的代码,不幸的是它不起作用。     任何人都可以告诉我它在哪里打破。感谢

    CREATE OR REPLACE PROCEDURE update_teacher IS

    u_id   NUMBER(6);
    CURSOR teacher_exist IS SELECT
        st.student_id,
        st.teacher_id,
        st.college_id,
        rd.role_name
                            FROM
        student_info st, 
        teacher p,
        teacher_info tf, 
        role_enabled f,
        role_def rd
                            WHERE
        tf.teacher_id = p.teacher_id
        AND st.teacher_id = p.teacher_id
        AND tf.teacher_id = f.link_id
        AND f.role_id = rd.role_id
        AND p.primary_college_id = st.college_id
        AND rd.role_id != 109 
        AND st.transferred = 'Y';

BEGIN
    FOR rec IN teacher_exist LOOP
        SELECT
            p.teacher_id
        INTO u_id
        FROM
            teacher p,
            teacher_info ps, 
            role_enabled f,
            role_def rd
        WHERE
            ps.teacher_id = p.teacher_id
            AND ps.teacher_id = f.link_id
            AND f.role_id = rd.role_id
            AND p.primary_college_id = rec.college_id
            AND rd.role_id = 109 
            AND p.teacher_status = 'A' 
            AND ROWNUM = 1;

        UPDATE student_info sf
            SET 
                sf.teacher_id = u_id
        WHERE
            sf.student_id = rec.student_id
            AND sf.college_id = rec.college_id;

    END LOOP;
END;

0 个答案:

没有答案