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

希望解决一个有关问题

更新时间: 2014-01-05 02:13:56 责任编辑: Author_N1

 

希望解决一个问题
你好 请问 这个问题怎么解决 oracle做的网上选课系统 当我看见一片博客用触发器来控制一个课程允许多少个人去修 你的代码如下
CREATE TRIGGER tri_takecourse ON tb_stucourse  
FOR INSERT,UPDATE  
AS  
    IF(SELECT COUNT(*) FROM tb_stucourse,inserted  
    WHERE tb_stucourse.CourseNum=inserted.CourseNum)>40  
BEGIN  
    PRINT '所对应课程选课人数不能超过40个!'  
    ROLLBACK  
END  


我就根据这个 用oracle系统表里面的 emp表 来控制 一个部门允许不超过30个人来写 一段代码 
如下

           
       create or replace trigger t_takedeptnum 
       before insert or update on emp for each row
         begin
         if select count(*) from emp,inserting
             where emp.deptno=inserting.deptno)>20 
         then
          dbms_output.put_line('renshuxianzhi');
          rollback;
         end if;
         end;    
           

但是  执行后  提示 Warning: Trigger created with compilation errors 
如果要完成这个触发器 该怎么写 ,我好知道后 用在我的 网上选课系统中 我用的数据库是oracle
--参考方法--

CREATE OR REPLACE TRIGGER T_TAKEDEPTNUM BEFORE INSERT OR UPDATE ON EMP FOR EACH ROW
  DECLARE 
    WRK_CNT NUMBER(20):=0;
   BEGIN
    SELECT COUNT(*) INTO WRK_CNT FROM EMP WHERE EMP.DEPTNO=:NEW.DEPTNO ;
   IF WRK_CNT>0 THEN
    DBMS_OUTPUT.PUT_LINE('RENSHUXIANZHI');
    --rollback;(不能在触发器中执行rollback)
   END IF;
  END;

--参考方法--
引用:
楼上这个怎么控制 的,定义一个   WRK_CNT NUMBER(20):=0;    然后IF WRK_CNT>0 又说不能用触发器, 希望其他人指点一下


笔误,在你给的情形下应该是
IF WRK_CNT>30 THEN
不是不能用触发器,这本身就是触发器,只是ROLLBACK这个指令不能直接在这用,否则编译不通过。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

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