当前位置: 代码迷 >> Oracle开发 >> 希望解决一个有关问题
  详细解决方案

希望解决一个有关问题

热度:37   发布时间:2016-04-24 06:52:07.0
希望解决一个问题
你好 请问 这个问题怎么解决 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
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这个指令不能直接在这用,否则编译不通过。
  相关解决方案