欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

求解决 写出函数、存储过程跟触发器

更新时间: 2014-01-05 02:16:42 责任编辑: Author_N1

 

求解决 写出函数、存储过程和触发器
数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

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

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:16:42
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7915/
本文WWW.DOC100.NET DOC100.NET版权所有。