oracle设置每列字符数,如何修改一个数字字段

怎么修改一个数字字段

14310499.png

143104100.png

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

我的问题是

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

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

这是整个er图

143104101.png

分享到:

更多

------解决方案--------------------

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

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

select maxnum,course_curnum into v_mx,v_cur from tb_course where CourseNo=crno;

if v_mx>=v_cur+1 then

insert into tb_fin_course(CourseNo,StudentNo,TeacherNo) values (crno,stno,stno);

update tb_course set course_curnum=course_curnum+1 where CourseNo=crno;

commit;

Result:=1;

return(Result);

else

Result:=0;

return(Result);

end if;

end fun_st_course;

SQL> exec :abc:=fun_st_course(1234,002,300);

PL/SQL procedure successfully completed

abc

---------

1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值