你好 请问 这个问题怎么解决 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;
------解决方案--------------------
笔误,在你给的情形下应该是
IF WRK_CNT>30 THEN
不是不能用触发器,这本身就是触发器,只是ROLLBACK这个指令不能直接在这用,否则编译不通过。