Oracle:模擬高考查分~一個簡單的存儲過程

1.建立表學生信息表(stu_info)並插入數據

  1. create table stu_info ( 
  2. stu_num number(10) primary key, 
  3. stu_name varchar2(10) not null, 
  4. stu_sex varchar2(2) check(stu_sex in('M','F')), 
  5. phone_num number(11), 
  6. idcard_num varchar2(18), 
  7. stu_school varchar2(50), 
  8. post_addr varchar2(50) 
  9. ); 

  1. insert into stu_info values (2012100201,'zs','M',13800138000,'130822198804070011','HBSJZDYZX','HBSJZSZXLWWJ47H'); 
  2. insert into stu_info values (2012100202,'ls','M',13821138012,'130822198401170051','HBSJZDYZX','HBSJZSZXLNJ143H'); 
  3. insert into stu_info values (2012100203,'ml','F',13315819091,'131812198811031004','HBSJZDYZX','HBSJZSKML33H'); 
  4. insert into stu_info values (2012100204,'ww','M',18010078102,'131822198904173312','HBCDDYZX','HBSJCDSTLJ42H'); 
  5. insert into stu_info values (2012100205,'yb','M',13511313105,'130825198704143301','HBCDDYZX','HBCDDYZX'); 
  6. insert into stu_info values (2012100206,'ff','F',18710013306,'100012198802041724','HBCDCYZX','HBCDLHRXNJ270H'); 
  7. insert into stu_info values (2012100207,'zx','F',13101108892,'130824198711122212','HBCDCYZX','HBCDLHXDZC009H'); 
  8. insert into stu_info values (2012100208,'tz','M',13800138010,'130822198804270121','HBCDLHDYZX','HBCDLHXBZC191H'); 
  9. insert into stu_info values (2012100209,'xf','M',18710081213,'13224219860612913X','HBCDLHDYZX','HBCDLHDYZX'); 
  10. insert into stu_info values (2012100210,'aq','F',13800138001,'130822198402110134','HBCDLHDYZX','HBCDLHDYZX'); 
  11. insert into stu_info values (2012100211,'lm','F',13800138100,'211800198805313114','HBCDLHDYZX','BJSXCQZLGL134H'); 
  12. insert into stu_info values (2012100212,'lw','M',18113081412,'130998198608093919','HBCDCYZX','BJSXCQZLGL134H'); 
  13.  
  14. insert into stu_info values (2012211101,'bk','M',18133065974,'701822198706090115','HBSJZDYZX','HBSJZDYZX'); 
  15. insert into stu_info values (2012211102,'by','M',13900139001,'12932119880407091X','HBSJZDYZX','HBSJZSZXLWWJ90H'); 
  16. insert into stu_info values (2012211103,'mm','F',13800138041,'900838198612011136','HBSJZDYZX','HBSJZDYZX'); 
  17. insert into stu_info values (2012211104,'wj','M',13611829910,'887990198711871117','HBCDDYZX','HBCDDYZX'); 
  18. insert into stu_info values (2012211105,'jf','F',17988011992,'130826198701171008','HBSCDDYZX','HBCDDYZX'); 
  19. insert into stu_info values (2012211106,'sf','F',18890988138,'130822198804070012','HBSCDDYZX','HBSCDSGYL110H'); 
  20. insert into stu_info values (2012211107,'st','M',17799088897,'187908198811070013','HBSCDLHDYZX','HBSCDSLHZXL998H'); 
  21. insert into stu_info values (2012211108,'zd','M',13800981786,'299822198804071021','HBSCDLHDYZX','HBSCDLHDYZX'); 
  22. insert into stu_info values (2012211109,'xx','F',18900000909,'131825198709221414','HBSLHDYZX','HBSLHDYZX'); 
  23. insert into stu_info values (2012311110,'ll','M',13800090099,'13081819851009','HBSLHDYZX','HBSLHDYZX'); 
  24.   
  25. insert into stu_info values (2012341401,'sq','M',18010179986,'19787619890922000X','HBSJZDYZX','HBSJZSZXLDXJ10H'); 
  26. insert into stu_info values (2012341402,'wm','F',13800138000,'131822198804070012','HBSJZDYZX','HBSJZSZXLFZL99H'); 
  27. insert into stu_info values (2012341403,'sl','M',13800198010,'198898198606091785','HBSCDDYZX','HBSCDSFPL78H'); 
  28.  
  29. insert into stu_info values (2012341404,'zq','M',16310137108,'316611198801173309','HBSCDDYZX','HBSCDDYZX'); 
  30. insert into stu_info values (2012341405,'sz','F',13010013875,'101775198712041124','HBSLHDYZX','HBSLHDYZX'); 
  31. insert into stu_info values (2012341406,'bf','M',13810131100,'130822198604071701','HBSJZDYZX','HBSLHXFYL8H'); 
  32. insert into stu_info values (2012341407,'zh','F',19999999999,'99999919890929999Y','HBSLHDYZX','HBSLHDYZX'); 

2.建立學生志願表(stu_wish)

  1. create table stu_wish ( 
  2. stu_num number(10) primary key
  3. fir_university_id number(5) not null
  4. sec_university_id number(5) 
  5. ); 

  1. insert into stu_wish values (2012100201,10001,20002); 
  2. insert into stu_wish values (2012100202,10003,20002); 
  3. insert into stu_wish values (2012100203,10004,20001); 
  4. insert into stu_wish values (2012100204,10004,20005); 
  5. insert into stu_wish values (2012100205,10005,20001); 
  6. insert into stu_wish values (2012100206,10002,20005); 
  7. insert into stu_wish values (2012100207,10003,20003); 
  8. insert into stu_wish values (2012100208,10001,20004); 
  9. insert into stu_wish values (2012100209,10002,20004); 
  10. insert into stu_wish values (2012100210,10005,20002); 
  11. insert into stu_wish values (2012100211,10002,20003); 
  12. insert into stu_wish values (2012100212,10003,20002); 
  13.   
  14. insert into stu_wish values (2012211101,10011,20011); 
  15. insert into stu_wish values (2012211102,10012,20015); 
  16. insert into stu_wish values (2012211103,10014,20014); 
  17. insert into stu_wish values (2012211104,10013,20015); 
  18. insert into stu_wish values (2012211105,10013,20012); 
  19. insert into stu_wish values (2012211106,10015,20013); 
  20. insert into stu_wish values (2012211107,10011,20012); 
  21. insert into stu_wish values (2012211108,10012,20011); 
  22. insert into stu_wish values (2012211109,10012,20014); 
  23. insert into stu_wish values (2012311110,10014,20015); 
  24.  
  25. insert into stu_wish(stu_num,fir_university_id) values (2012341401,10021); 
  26. insert into stu_wish(stu_num,fir_university_id) values (2012341402,10022); 
  27. insert into stu_wish(stu_num,fir_university_id) values (2012341403,10023); 
  28.  
  29. insert into stu_wish(stu_num,fir_university_id) values (2012341404,10032); 
  30. insert into stu_wish(stu_num,fir_university_id) values (2012341405,10032); 
  31. insert into stu_wish(stu_num,fir_university_id) values (2012341406,10031); 
  32. insert into stu_wish(stu_num,fir_university_id) values (2012341407,10033); 

3.建立大學信息表(university_info)

  1. create table university_info ( 
  2. uni_id number(5) primary key
  3. uni_name varchar2(10) not null
  4. batch_id number(5), 
  5. low_cri number(4,1)); 

  1. insert into university_info values(10001,'TsingHua',1001,632); 
  2. insert into university_info values(10002,'BeijingUni',1001,629); 
  3. insert into university_info values(10003,'Fudan',1001,600); 
  4. insert into university_info values(10004,'HaGongDa',1001,601); 
  5. insert into university_info values(10005,'BeijingLG',1001,590); 
  6.  
  7. insert into university_info values(20001,'YanShan',1002,519); 
  8. insert into university_info values(20002,'HBFarmUni',1002,431); 
  9. insert into university_info values(20003,'YNDX',1002,497); 
  10. insert into university_info values(20004,'BFXY',1002,561); 
  11. insert into university_info values(20005,'TSWL',1002,500); 
  12.  
  13. insert into university_info values(10011,'TsingHua',1003,623); 
  14. insert into university_info values(10012,'BeijingUni',1003,617); 
  15. insert into university_info values(10013,'Fudan',1003,585); 
  16. insert into university_info values(10014,'ZhejiangUn',1003,601); 
  17. insert into university_info values(10015,'BeijingRA',1003,580); 
  18.  
  19. insert into university_info values(20011,'YanShan',1004,519); 
  20. insert into university_info values(20012,'HBFarmUni',1004,431); 
  21. insert into university_info values(20013,'YNDX',1004,497); 
  22. insert into university_info values(20014,'BFXY',1004,561); 
  23. insert into university_info values(20015,'TSWL',1004,500); 
  24.  
  25. insert into university_info values(10021,'YanShan',1005,420); 
  26. insert into university_info values(10022,'HBFarmUni',1005,431); 
  27. insert into university_info values(10023,'TsingHua',1005,527); 
  28.  
  29. insert into university_info values(10031,'YanShan',1006,330); 
  30. insert into university_info values(10032,'HBFarmUni',1006,359); 
  31. insert into university_info values(10033,'TsingHua',1006,575); 

4. 建立學生考試成績表(stu_grade)

  1. create table stu_grade ( 
  2. stu_num number(10) primary key
  3. branch varchar2(3) check(branch in('A','S','SP','AR')), 
  4. grade_mat number(4,1) check(grade_mat<=150 and grade_mat>=0), 
  5. grade_che number(4,1) check(grade_che<=150 and grade_che>=0), 
  6. grade_eng number(4,1) check(grade_eng<=150 and grade_eng>=0), 
  7. grade_inte number(4,1) check(grade_inte<=300 and grade_inte>=0) 
  8. ); 

  1. insert into stu_grade values (2012100201,'S',139,114,98,251); 
  2. insert into stu_grade values (2012100202,'S',79,96,81,212); 
  3. insert into stu_grade values (2012100203,'S',112.5,88,149,229); 
  4. insert into stu_grade values (2012100204,'S',87,94,82,181); 
  5. insert into stu_grade values (2012100205,'S',76,90,67,101); 
  6. insert into stu_grade values (2012100206,'S',138,141,150,281); 
  7. insert into stu_grade values (2012100207,'S',88,94,123,61); 
  8. insert into stu_grade values (2012100208,'S',97,42,80,119); 
  9. insert into stu_grade values (2012100209,'S',39.5,24,48.5,62); 
  10. insert into stu_grade values (2012100210,'S',110,80,82,180.5); 
  11. insert into stu_grade values (2012100211,'S',97,88,109,200.5); 
  12. insert into stu_grade values (2012100212,'S',138,74,28,281); 
  13.  
  14. insert into stu_grade values (2012211101,'A',112,138,143,201); 
  15. insert into stu_grade values (2012211102,'A',97,124,138,219); 
  16. insert into stu_grade values (2012211103,'A',72,64,98,123); 
  17. insert into stu_grade values (2012211104,'A',139,144,150,257); 
  18. insert into stu_grade values (2012211105,'A',121,113,111.5,198); 
  19. insert into stu_grade values (2012211106,'A',100,74,72,81); 
  20. insert into stu_grade values (2012211107,'A',71,84,91,151); 
  21. insert into stu_grade values (2012211108,'A',127,144,146.5,232); 
  22. insert into stu_grade values (2012211109,'A',76,114,56,99.5); 
  23. insert into stu_grade values (2012311110,'A',19,81,84.5,51.5); 
  24.  
  25. insert into stu_grade values (2012341401,'SP',90,88,98.5,177); 
  26. insert into stu_grade values (2012341402,'SP',39,64,51,70); 
  27. insert into stu_grade values (2012341403,'SP',65,94,108,159); 
  28. insert into stu_grade values (2012341404,'AR',99,110,98.5,251); 
  29. insert into stu_grade values (2012341405,'AR',89,114,96,193); 
  30. insert into stu_grade values (2012341406,'AR',29,76,99.5,201); 
  31. insert into stu_grade values (2012341407,'AR',63,82,73,106); 

5.建立提檔線表(low_criterion)

  1. create table low_criterion( 
  2. branch varchar2(3) check(branch in('A','S','SP','AR')), 
  3. batch_id number(5),batch_name varchar2(10),low_cri number(4,1)); 

  1. insert into low_criterion values('S',1001,'BKYP',582); 
  2. insert into low_criterion values('S',1002,'BKEP',430); 
  3. insert into low_criterion values('A',1003,'BKYP',573); 
  4. insert into low_criterion values('A',1004,'BKEP',450); 
  5. insert into low_criterion values('SP',1005,'SPORT',399); 
  6. insert into low_criterion values('AR',1006,'ART',300); 

6.建立程序查詢存儲過程

  1. create or replace procedure pro_search_grade(stu_n in number) 
  2. as 
  3.          pro_bra varchar2(3); 
  4.          grade_sum number(4,1):=0; 
  5.          pro_batch varchar2(10); 
  6.          max_low number(4,1):=0; 
  7.          pro_name varchar2(10); 
  8.          max_sum_grade number(4,1):=0; 
  9.          max_stu_name varchar2(10); 
  10.          max_stu_num number(10):=0; 
  11. begin 
  12.          select stu_name into pro_name 
  13.                    from stu_info where stu_num=stu_n; 
  14.          dbms_output.put('Student: '); 
  15.          dbms_output.put_line(pro_name); 
  16.          select branch into pro_bra 
  17.                    from stu_grade where stu_num=stu_n; 
  18.          select grade_mat+grade_che+grade_eng+grade_inte into grade_sum 
  19.                    from stu_grade where stu_num=stu_n; 
  20.          dbms_output.put('Your grade is '); 
  21.          dbms_output.put_line(grade_sum); 
  22.          select max(low_cri) into max_low 
  23.                    from low_criterion 
  24.                    where branch=pro_bra and grade_sum>=low_cri; 
  25.          if max_low>0 then 
  26.                    select batch_name into pro_batch 
  27.                    from low_criterion 
  28.                    where low_cri=max_low; 
  29.                    dbms_output.put('Congratulations to you for inetrnational '); 
  30.                    dbms_output.put_line(pro_batch); 
  31.          else 
  32.                    dbms_output.put_line('You will dead~'); 
  33.          end if; 
  34.          select max(sum_grade) into max_sum_grade 
  35.                    from 
  36.                    (select grade_mat+grade_che+grade_eng+grade_inte sum_grade from stu_grade where branch=pro_bra); 
  37.          with tmp_t1 
  38.                    as 
  39.                             (select stu_num,grade_mat+grade_che+grade_eng+grade_inte sum_grade from stu_grade) 
  40.                    select stu_num into max_stu_num 
  41.                             from tmp_t1 
  42.                             where sum_grade=max_sum_grade; 
  43.          select stu_name into max_stu_name 
  44.                    from stu_info where stu_num=max_stu_num; 
  45.          dbms_output.put('The best student in this exap is '); 
  46.          dbms_output.put_line(max_stu_name); 
  47.          dbms_output.put('His grade is '); 
  48.          dbms_output.put_line(max_sum_grade); 
  49.          dbms_output.put('His Student Number is '); 
  50.          dbms_output.put_line(max_stu_num); 
  51. end

#執行結果如下==================================

7.建立錄取查詢存儲過程

  1. create or replace procedure pro_search_admit(stu_n in number) 
  2. as 
  3.          grade_sum number(4,1):=0; 
  4.          wish_uni_grade number(4,1):=999; 
  5.          uni_num number(5):=0; 
  6.          univer_name varchar2(10); 
  7. begin 
  8.          select  grade_mat+grade_che+grade_eng+grade_inte into grade_sum 
  9.                    from stu_grade where stu_num=stu_n; 
  10.                    select fir_university_id into uni_num from stu_wish 
  11.                             where stu_num=stu_n; 
  12.                    select  tmp_t1.low_cri into wish_uni_grade 
  13.                             from university_info tmp_t1,stu_wish tmp_t2 
  14.                             where tmp_t1.uni_id=tmp_t2.fir_university_id 
  15.                             and tmp_t2.stu_num=stu_n; 
  16.          if wish_uni_grade>=grade_sum then 
  17.                    wish_uni_grade := 999; 
  18.          end if; 
  19.          if wish_uni_grade = 999 then 
  20.                             select sec_university_id into uni_num from stu_wish 
  21.                                      where stu_num=stu_n; 
  22.                             select  tmp_t1.low_cri into wish_uni_grade 
  23.                                      from university_info tmp_t1,stu_wish tmp_t2 
  24.                                      where tmp_t1.uni_id=tmp_t2.sec_university_id 
  25.                                      and tmp_t2.stu_num=stu_n; 
  26.          end if; 
  27.          if wish_uni_grade<=grade_sum then 
  28.                    select uni_name into univer_name 
  29.                             from university_info 
  30.                             where uni_id=uni_num; 
  31.                    dbms_output.put('Congratulations to you that you are admitted by '); 
  32.                    dbms_output.put_line(univer_name); 
  33.          else 
  34.                    dbms_output.put_line('Sorry,I have search so hardly,But not find any message!'); 
  35.          end if; 
  36. end

#執行結果如下==================

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章