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

怎么修改一个数字字段


当做一个网上选课系统的时候 这是一个选课表 当然还有学生 课程表 等等

我的问题是 
如何修改一个数字字段addstu,当有新数据插入带有这个字段的表fin course 当中  的时候 ,这个字段就加1  从而达到控制这门课程的人数限制比如30个人 之内

这是需要写一个 过程游标,还是写一个函数 还是什么 现在没有思绪 
这是整个er图

------解决方案--------------------
建一个触发器就可以了,刚写了一个测试用的,给你参考。

SQL> CREATE TABLE idletest(ID NUMBER);
 
Table created
SQL> CREATE OR REPLACE TRIGGER idletesttrigger BEFORE INSERT ON idletest
  2  DECLARE v NUMBER;
  3  BEGIN
  4    SELECT COUNT(ID) INTO v FROM idletest;
  5    IF v >= 3 THEN
  6      RAISE_APPLICATION_ERROR(-20001, 'max is 3');
  7      END IF;
  8  END;
 
  9  /
 
Trigger created
 
SQL> 
SQL> INSERT INTO idletest VALUES(1);
 
1 row inserted
SQL> INSERT INTO idletest VALUES(2);
 
1 row inserted
SQL> INSERT INTO idletest VALUES(3);
 
1 row inserted
SQL> INSERT INTO idletest VALUES(4);
 
INSERT INTO idletest VALUES(4)
 
ORA-20001: max is 3
ORA-06512: 在 "RCOTRPR1.IDLETESTTRIGGER", line 5
ORA-04088: 触发器 'RCOTRPR1.IDLETESTTRIGGER' 执行过程中出错
 
SQL> 

------解决方案--------------------
引用:
Quote: 引用:

你这里addstu字段是不是应该放在tb_course表里;
同时这个表还订制一个maxnum字段记录30是最大数,
每插入一条对应课程学生关系记录到tb_fin_course,就同时更新tb_course.addstu加1,判断不超过maxnum=30的前提下,以上都可以在一个存储过程中实现

你说的 每次插入一条对应课程学生关系记录 到 fin-course表中 这个是什么 ,我没看懂,希望你把整个过程的详细代码截个图,我才开始初学,这不是都搞了一天了,老呆都晕了。还是没想出怎么用代码去实现

create or replace function fun_st_course(crno in number, stno in number,stno in number) return integer is
 PRAGMA AUTONOMOUS_TRANSACTION; 
  Result integer;
  v_mx number;
  v_cur number;
begin
  sele