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

求解决 写出函数、存储过程和触发器
数Function
【备注1】状态
<招生日 -- 预备中
>= 招生日+ <50%计划招生人数,招生中
>= 招生日+ >=50%计划招生人数,热招中
>= 招生日+ >=90%计划招生人数,还余多少计划招生人数(余xx位)
>=开课日 + <=50%计划招生人数,开课失败
>=开课日 + >50%计划招生人数,开课中

5. 存储过程 Procedure
【表的数据必须是通过存储过程来进行 【增】、【删】、【改】
并且同一学员不能在同一时间上不同的课程。

6. 触发器trigger
【备注2】培训报名的时候,如果学员已报名1次,则90%折扣;2次80%;3次70%;4次及以上,50%;

7. 包 Package
把以上的函数function、存储过程 Procedure 装入一个包

------解决方案--------------------
大作业啊。。

------解决方案--------------------
表结构什么都不知道,如何做?

求解决 写出函数、存储过程和触发器》?
自己先写写,有问题了再问啊
------解决方案--------------------
三个表结构 培训课程表
课程名、课程id、招生日、开课日、结束日、计划招生数、费用、状态
培训人员表
中文名、工作id、培训课程、课程id、学历、毕业时间
培训报名表
培训者、报名id、报名课程、课程id、总费用
存储过程写出来了,函数和触发器搞不掂

------解决方案--------------------
CREATE OR REPLACE TRIGGER trigger_cost
AFTER INSERT
ON sign
DECLARE
  v_count number;
BEGIN
  SELECT COUNT(*) INTO v_count 
FROM sign 
WHERE signer_name LIKE :NEW.signer_name;
IF v_count = 2 THEN
  UPDATE sign SET sign_charge = 0.9 * sign_charge WHERE sign_course LIKE :NEW.sign_course;
ELSIF v_count = 3 THEN
  UPDATE sign SET sign_charge = 0.8 * sign_charge WHERE sign_course LIKE :NEW.sign_course;
ELSIF v_count = 4 THEN
  UPDATE sign SET sign_charge = 0.7 * sign_charge WHERE sign_course LIKE :NEW.sign_course;
ELSIF v_count >= 5 THEN
  UPDATE sign SET sign_charge = 0.5 * sign_charge WHERE sign_course LIKE :NEW.sign_course;
ELSE
END IF;
END trigger_cost;
无效的触发器说明,哪儿错了
------解决方案--------------------
引用:
CREATE OR REPLACE TRIGGER trigger_cost
AFTER INSERT
ON sign
DECLARE
  v_count number;
BEGIN
  SELECT COUNT(*) INTO v_count 
FROM sign 
WHERE signer_name LIKE :NEW.signer_name;
IF v_count = 2……


不需要更新语句,直接赋值给 :NEW.sign_charge = 0.9 *  :NEW.sign_charge

如果要更新,触发器里更新本表,要用自治事务
------解决方案--------------------
这个问题我解决了,还是谢谢你!我还想问问同一学员不能在同一时间上不同的课程这个存储过程怎么写以及把函数和存储过程建到一个包里是怎么建。(分都会给你的)