ITPub博客

首页 > 数据库 > Oracle > oracle存储过程实例(同步人事系统信息数据)

oracle存储过程实例(同步人事系统信息数据)

Oracle 作者:雨吁 时间:2012-01-10 15:04:20 0 删除 编辑

CREATE OR REPLACE
PROCEDURE PROC_STU_TEA
AS
v_tea_id number(19);--班主任对应id
v_class_id number(19);--班级表的id
v_stu_count int;--统计学生信息数量
v_claz_count int;--统计班级数据
v_cla_count int;--统计班级数据
v_tea_count int;--统计教职工数据
v_sso_count int;--统计sso登陆信息数
v_sso_name varchar(20);--sso登陆名
BEGIN

 --显示游标使用,使用for循环
  --定义游标,名称为cur_tea
   declare cursor cur_tea is select BIRTH_DATE,SEX,STAFF_ID,name,NATION,SCHOOL_CD from
sxdcp.HR_M_STAFF_BASE@SXDCP order by sid;
begin
     --循环游标数据
   for teatch in cur_tea
    loop
             --根据查询条件,检索ACCT_PERSON表中是否存在相同记录。
             select count(*) into v_tea_count from ACCT_PERSON where IDNUMBER = teatch.STAFF_ID;
             --统计判断是否存在sso登录名的教师
             select count(*) into v_sso_count from
sxdcp.sys_m_user@SXDCP where RELATION_PERSON_CD=teatch.STAFF_ID;
         --判断是否有相应数据,如果有则update此记录,否则insert数据。
          if v_tea_count = 0 and v_sso_count =0 then           
                --插入教职工信息
                insert into ACCT_PERSON (ID,BIRTHDAY,GENDER,IDNUMBER,NAME,NATIONALITY,SCHOOLCODE,TYPE) values(PERSON_SEQ.nextval,teatch.BIRTH_DATE,teatch.SEX,teatch.STAFF_ID,teatch.name,teatch.NATION,teatch.SCHOOL_CD,2);
          elsif v_tea_count = 0 and v_sso_count =1 then
              --获取教师sso登陆名
                select USER_PIN into v_sso_name from
sxdcp.sys_m_user@SXDCP where RELATION_PERSON_CD=teatch.STAFF_ID AND rownum =1;
               --插入教职工信息
                insert into ACCT_PERSON (ID,BIRTHDAY,GENDER,IDNUMBER,LOGINNAME,NAME,NATIONALITY,SCHOOLCODE,TYPE) values(PERSON_SEQ.nextval,teatch.BIRTH_DATE,teatch.SEX,teatch.STAFF_ID,v_sso_name,teatch.name,teatch.NATION,teatch.SCHOOL_CD,2);
          elsif v_tea_count = 1 and v_sso_count =1 then
               --更新教职工信息
                update ACCT_PERSON set BIRTHDAY=teatch.BIRTH_DATE,GENDER=teatch.SEX,IDNUMBER=teatch.STAFF_ID,LOGINNAME=v_sso_name,NAME=teatch.name,NATIONALITY=teatch.NATION,SCHOOLCODE=teatch.SCHOOL_CD,TYPE=2 where IDNUMBER=teatch.STAFF_ID;
          elsif v_tea_count = 1 and v_sso_count =0 then
               --更新教职工信息
                update ACCT_PERSON set BIRTHDAY=teatch.BIRTH_DATE,GENDER=teatch.SEX,IDNUMBER=teatch.STAFF_ID,NAME=teatch.name,NATIONALITY=teatch.NATION,SCHOOLCODE=teatch.SCHOOL_CD,TYPE=2 where IDNUMBER=teatch.STAFF_ID;
         end if;
    end loop;
    --自动关闭游标
end;

    --显示游标使用,使用for循环
  --定义游标,名称为cur_clazz
  declare cursor cur_clazz is select s.CLASS_ID,s.CLASS_NM,s.CLASS_CR_DATE,s.CLASS_EXPIRED_DATE,s.GRADE_ID,gr.GRADE_NAME,s.CLASS_LEARNING_PERIOD,s.SCHOOL_CD,s.HEAD_TEACHER from
sxdcp.STU_M_CLASS@SXDCP s, sxdcp.STU_M_GRADE@SXDCP gr,sxdcp.HR_M_STAFF_BASE@SXDCP th  where s.GRADE_ID = gr.GRADE_ID and th.STAFF_ID=s.HEAD_TEACHER;    
begin
   --循环游标数据
      for clazz in cur_clazz
    loop 
           --根据查询条件,检索ACCT_CLAZZ表中是否存在相同记录。
             select count(*) into v_claz_count from ACCT_CLAZZ where CLASSCODE=clazz.CLASS_ID;
           --根据查询条件,检索ACCT_PERSON表中是否存在班主任信息。
             select count(*) into v_tea_count from ACCT_PERSON where IDNUMBER=clazz.HEAD_TEACHER;
          --判断是否有相应数据,如果有则update此记录,否则insert数据。
          if v_claz_count=0 and v_tea_count=0 then  
             --插入班级信息记录。
             insert into ACCT_CLAZZ (ID,CLASSCODE,CLASSNAME,CREATEDATE,EXPIREDDATE,GRADECODE,GRADENAME,LEARNINGPERIOD,SCHOOLCODE,SCHOOLYEARCODE) values(CLAZZ_SEQ.nextval,clazz.CLASS_ID,clazz.CLASS_NM,clazz.CLASS_CR_DATE,clazz.CLASS_EXPIRED_DATE,clazz.GRADE_ID,clazz.GRADE_NAME,clazz.CLASS_LEARNING_PERIOD,clazz.SCHOOL_CD,''); 
          elsif v_claz_count=0 and v_tea_count=1 then
               --检索班主任信息id。
             select id into v_tea_id from ACCT_PERSON where IDNUMBER=clazz.HEAD_TEACHER;
            --插入班级信息记录。
             insert into ACCT_CLAZZ (ID,CLASSCODE,CLASSNAME,CREATEDATE,EXPIREDDATE,GRADECODE,GRADENAME,LEARNINGPERIOD,SCHOOLCODE,SCHOOLYEARCODE,COORDINATOR_ID) values(CLAZZ_SEQ.nextval,clazz.CLASS_ID,clazz.CLASS_NM,clazz.CLASS_CR_DATE,clazz.CLASS_EXPIRED_DATE,clazz.GRADE_ID,clazz.GRADE_NAME,clazz.CLASS_LEARNING_PERIOD,clazz.SCHOOL_CD,'',v_tea_id); 
            --更新人员类型
             update ACCT_PERSON set TYPE=1 where IDNUMBER=clazz.HEAD_TEACHER;
          elsif  v_claz_count=1 and v_tea_count=0 then
             --更新班级信息记录。
             update ACCT_CLAZZ set CLASSCODE=clazz.CLASS_ID,CLASSNAME=clazz.CLASS_NM,CREATEDATE=clazz.CLASS_CR_DATE,EXPIREDDATE=clazz.CLASS_EXPIRED_DATE,GRADECODE=clazz.GRADE_ID,GRADENAME=clazz.GRADE_NAME,LEARNINGPERIOD=clazz.CLASS_LEARNING_PERIOD,SCHOOLCODE=clazz.SCHOOL_CD,SCHOOLYEARCODE='' where CLASSCODE=clazz.CLASS_ID;
          elsif  v_claz_count=1 and v_tea_count=1 then
               --检索班主任信息id。
             select id into v_tea_id from ACCT_PERSON where IDNUMBER=clazz.HEAD_TEACHER;
             --更新班级信息记录。
             update ACCT_CLAZZ set CLASSCODE=clazz.CLASS_ID,CLASSNAME=clazz.CLASS_NM,CREATEDATE=clazz.CLASS_CR_DATE,EXPIREDDATE=clazz.CLASS_EXPIRED_DATE,GRADECODE=clazz.GRADE_ID,GRADENAME=clazz.GRADE_NAME,LEARNINGPERIOD=clazz.CLASS_LEARNING_PERIOD,SCHOOLCODE=clazz.SCHOOL_CD,SCHOOLYEARCODE='',COORDINATOR_ID=v_tea_id where CLASSCODE=clazz.CLASS_ID;
              --更新人员类型
             update ACCT_PERSON set TYPE=1 where IDNUMBER=clazz.HEAD_TEACHER;
            end if;
   end loop;
  --自动关闭游标
end;

   --显示游标使用,使用for循环
  --定义游标,名称为cur_stu
     declare cursor cur_stu is select de.BIRTH_DATE,de.STUDENT_ID,de.STUDENT_NAME,de.SEX,de.STUDENT_NATION,de.SCHOOL_CD,de.CLASS_ID from
sxdcp.STU_M_STUDENT@SXDCP de,sxdcp.STU_M_CLASS@SXDCP s,sxdcp.HR_M_STAFF_BASE@SXDCP th where de.CLASS_ID=s.CLASS_ID and s.HEAD_TEACHER=th.STAFF_ID;
begin
   --循环游标数据
   for student in cur_stu
    loop 
          --根据查询条件,检索ACCT_PERSON表中是否存在相同记录。
         select count(*) into v_stu_count from ACCT_PERSON where IDNUMBER=student.STUDENT_ID;
           --查询符合条件的班级id
           select count(*) into v_cla_count from ACCT_CLAZZ where CLASSCODE=student.CLASS_ID;
          --统计判断人员是否具有sso登录名
           select count(*) into v_sso_count from
sxdcp.sys_m_user@SXDCP where RELATION_PERSON_CD=student.STUDENT_ID;
        --判断是否有相应数据,如果有则update此记录,否则insert数据。
         if v_stu_count=0 then
      
            if v_sso_count =0 and v_cla_count =0 then
                 --同步数据到ACCT_PERSON表中
               insert into ACCT_PERSON (ID,BIRTHDAY,GENDER,IDNUMBER,NAME,NATIONALITY,SCHOOLCODE,TYPE) values(PERSON_SEQ.nextval,student.BIRTH_DATE,student.SEX,student.STUDENT_ID,student.STUDENT_NAME,student.STUDENT_NATION,student.SCHOOL_CD,0);
            elsif  v_sso_count =0 and v_cla_count =1 then
              --查询班级学生所在班级id
               select id into v_class_id from ACCT_CLAZZ where CLASSCODE=student.CLASS_ID;
              --同步数据到ACCT_PERSON表中
               insert into ACCT_PERSON (ID,BIRTHDAY,GENDER,IDNUMBER,NAME,NATIONALITY,SCHOOLCODE,TYPE,CLAZZ_ID) values(PERSON_SEQ.nextval,student.BIRTH_DATE,student.SEX,student.STUDENT_ID,student.STUDENT_NAME,student.STUDENT_NATION,student.SCHOOL_CD,0,v_class_id);
            elsif v_sso_count =1 and v_cla_count =0 then
                --同步数据到ACCT_PERSON表中
                --拿到学生sso登录名
               select USER_PIN into v_sso_name from
sxdcp.sys_m_user@SXDCP where RELATION_PERSON_CD=student.STUDENT_ID and rownum=1;
               insert into ACCT_PERSON (ID,BIRTHDAY,GENDER,IDNUMBER,LOGINNAME,NAME,NATIONALITY,SCHOOLCODE,TYPE) values(PERSON_SEQ.nextval,student.BIRTH_DATE,student.SEX,student.STUDENT_ID,v_sso_name,student.STUDENT_NAME,student.STUDENT_NATION,student.SCHOOL_CD,0); 
            elsif v_sso_count =1 and v_cla_count =1 then
                --查询班级学生所在班级id
               select id into v_class_id from ACCT_CLAZZ where CLASSCODE=student.CLASS_ID;
               --拿到学生sso登录名
               select USER_PIN into v_sso_name from
sxdcp.sys_m_user@SXDCP where RELATION_PERSON_CD=student.STUDENT_ID and rownum=1;
               --同步数据到ACCT_PERSON表中
               insert into ACCT_PERSON (ID,BIRTHDAY,GENDER,IDNUMBER,LOGINNAME,NAME,NATIONALITY,SCHOOLCODE,TYPE,CLAZZ_ID) values(PERSON_SEQ.nextval,student.BIRTH_DATE,student.SEX,student.STUDENT_ID,v_sso_name,student.STUDENT_NAME,student.STUDENT_NATION,student.SCHOOL_CD,0,v_class_id);  
           end if;

         elsif  v_stu_count=1 and v_sso_count=0 and v_cla_count=0 then
               update ACCT_PERSON set BIRTHDAY=student.BIRTH_DATE,GENDER=student.SEX,IDNUMBER=student.STUDENT_ID,NAME=student.STUDENT_NAME,NATIONALITY=student.STUDENT_NATION,SCHOOLCODE=student.SCHOOL_CD,TYPE=0 where IDNUMBER=student.STUDENT_ID;
         elsif  v_stu_count=1 and v_sso_count!=0 and v_cla_count=0 then
               --拿到学生sso登录名
               select USER_PIN into v_sso_name from
sxdcp.sys_m_user@SXDCP where RELATION_PERSON_CD=student.STUDENT_ID and rownum=1;
               --更新数据库中已经存在的数据
               update ACCT_PERSON set BIRTHDAY=student.BIRTH_DATE,GENDER=student.SEX,IDNUMBER=student.STUDENT_ID,LOGINNAME=v_sso_name,NAME=student.STUDENT_NAME,NATIONALITY=student.STUDENT_NATION,SCHOOLCODE=student.SCHOOL_CD,TYPE=0 where IDNUMBER=student.STUDENT_ID;
         elsif  v_stu_count=1 and v_sso_count=0 and v_cla_count=1 then
                 --查询班级学生所在班级id
               select id into v_class_id from ACCT_CLAZZ where CLASSCODE=student.CLASS_ID;
               --更新数据库中已经存在的数据
               update ACCT_PERSON set BIRTHDAY=student.BIRTH_DATE,GENDER=student.SEX,IDNUMBER=student.STUDENT_ID,NAME=student.STUDENT_NAME,NATIONALITY=student.STUDENT_NATION,SCHOOLCODE=student.SCHOOL_CD,TYPE=0,CLAZZ_ID=v_class_id where IDNUMBER=student.STUDENT_ID;
         elsif  v_stu_count=1 and v_sso_count=1 and v_cla_count=1 then
                --查询班级学生所在班级id
               select id into v_class_id from ACCT_CLAZZ where CLASSCODE=student.CLASS_ID;
               --拿到学生sso登录名
               select USER_PIN into v_sso_name from
sxdcp.sys_m_user@SXDCP where RELATION_PERSON_CD=student.STUDENT_ID and rownum=1;
              --更新数据库中已经存在的数据
               update ACCT_PERSON set BIRTHDAY=student.BIRTH_DATE,GENDER=student.SEX,IDNUMBER=student.STUDENT_ID,LOGINNAME=v_sso_name,NAME=student.STUDENT_NAME,NATIONALITY=student.STUDENT_NATION,SCHOOLCODE=student.SCHOOL_CD,TYPE=0,CLAZZ_ID=v_class_id where IDNUMBER=student.STUDENT_ID;
        end if;
  end loop;
end;

END PROC_STU_TEA;

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21207165/viewspace-1116962/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-03-25