日期:2014-05-17  浏览次数:20865 次

oracle包,函数,过程,游标的使用
1
VIEW(V_COU_TEA_STU):
显示课程名,授课老师,课程所选学生数,课程是否可选。
2
PROCEDURE(P_TEA_SAL_BOUNS):
输入课程号,若该课程学生平均成绩达标并且不合格人数 <3 时,该任课老师加薪10%。若超过1/3学生不合格,显示任课老师信息以及不合格学生ID,且该课程任课老师的奖金取消。
3
PACKAGE(PKG_F001),包括下面功能:
3.1
创建FNCTION(PKG_F001_FNCTION)、根据输入学生学号,判断学生各课程成绩等级(A:100-90,B:89-80,C:79-60,D:小于60)并输出各课程成绩等级。
3.2
    创建PROCEDURE(PKG_F001_PROCEDURE_01),当传入学生姓名和课程名以及成绩时,则将传入值插入V_SUD_COU_SCO视图中,若视图不存在则创建视图,若输入学生姓名已经存在,则修改视图中课程名与成绩。
3.3
    创建PROCEDURE(PKG_F001_PROCEDURE_02),当输入学生学号时,则将V_SUD_COU视图中该学生对应的信息全部删除
    若该学号不存在,则给出相关提示。
3.4
    定义一个TRIGGER(PKG_FOO1_TRIGGER),要求建立一个日志表(SCS_LOG)记录有关V_SUD_COU_SCO视图的增删情况。
附:日志表字段(LOG_Category,LOG_Time)
3.5
使用带参数的游标,分别显示同一学生不同课程的分数。

------解决方案--------------------
这个过程写两个小时,终于调好了
/***************************
*Name: cux_xzh_proc_teacher_sal
*Purpose: 输入课程号,
*  若该课程学生平均成绩达标并且不合格人数 <3 时,该任课老师加薪10%。
*  若超过1/3学生不合格,显示任课老师信息以及不合格学生ID,且该课程任课老师的奖金取消。
*Author: XZH
*Create At: 2013-12-11
****************************/
CREATE OR REPLACE PROCEDURE cux_xzh_proc_201312111614(
  --o_retcode OUT NUMBER,
  --o_errmsg OUT VARCHAR2,
  o_cid IN xzh_course.cid%TYPE 
)
AS
  v_avg_grade NUMBER;          /*指定课程学生的平均成绩*/     
  v_rate NUMBER;                               /*及格率*/
  v_fail NUMBER;                               /*不合格人数*/
  /*定义教师游标*/
  CURSOR teacher_info_cur
    IS
     SELECT DISTINCT t.*
       FROM xzh_teacher t, xzh_course c, xzh_grade g
      WHERE t.tid = c.tid
        AND c.cid = g.cid
        AND c.cid = o_cid;
  
  /*学生游标*/
  CURSOR fail_sno_cur
  IS
   SELECT s.sno sno,g.grade grade
     FROM xzh_student s, xzh_course c, xzh_grade g
    WHERE s.sno = g.sno
  &nbs