图形界面下填入数据,不想写SQL代码???
是不是自己做form,如果你用D6i,文本约束直接设置输入框;你的学生选课的好像不是一个出发器能完成的,
显示课程的时候
select * from 课程表 a,学生 b
where a.course_id not in (select course_id from
学生 where score>=60 ) and a.course_id=b.course_id and a.stu_id=@p_stu_id
其他也差不多方法
是不是自己做form,如果你用D6i,文本约束直接设置输入框;你的学生选课的好像不是一个出发器能完成的,
显示课程的时候
select * from 课程表 a,学生 b
where a.course_id not in (select course_id from
学生 where score>=60 ) and a.course_id=b.course_id and a.stu_id=@p_stu_id
其他也差不多方法
create table tablename
(hh2 varchar2(6) check (substr(hh2,1,1) > 0 and substr(hh2,1,1) < 9));
每位写一下,应该就可以了!当然是比较笨的方法,也可以自己写个函数!或触发器!
2.字段类型为DATE,时间日期约束:时间形式必须如2004-07-26 14:00,而且小时必须在8到22之间.(这个东东现在连数据插入也有问题,我想在图形界面下填入数据,不想写SQL代码,最后好一下子导出,请问如何解决)
作为时间段的存储,我们是不考虑存储格式的,只要取出来的时候,进行格式转换就OK了!
日期
STARTTIME check(to_number(to_char(STARTTIME,'HH24'))>=8 and to_number(to_char (STARTTIME,'HH24'))<=22
sql大家也写了不少,就在此说了!
有两张表,一张学生(STU_ID,COURSE_ID,SCORE),一张课程表(COURSE_ID,STARTTIME,ENDTIME,ROOM),课程表有上课的起始时间STARTTIME和结束时间ENDTIME,时间格式跟上面一样,现在学生要选课要求是
1.只有学生的某门课分数SCORE低于60分才能重新选这门课,否则不能选同一门课二次
2.学生选的课中不能有两门课的上课时间重叠
3.上课分教室,两门课不能在重叠的时间用同一个教室ROOM
对这样的问题,我们基本上是根据过程来判断的,而不是用触发器来判断的!当然用触发器也可以!
create table wg_st(STU_ID varchar2(12),COURSE_ID varchar2(12),SCORE number(10));
create table wg_cu(COURSE_ID varchar2(12),STARTTIME date,ENDTIME date,ROOM varchar2(12));
--对学生选课
create or replace trigger trinamest
before insert on wg_st
for each row
declare
v_num number;
v_STARTTIME date;
v_ENDTIME date;
begin
select STARTTIME,ENDTIME into v_STARTTIME,v_ENDTIME from wg_cu where COURSE_ID = :new.COURSE_ID;
select count(*) into v_num from wg_st where STU_ID = :new.STU_ID and COURSE_ID = :new.COURSE_ID and SCORE >= 60; --1.只有学生的某门课分数SCORE低于60分才能重新选这门课,否则不能选同一门课二次
if v_num > 0 then
return;
end if;
select count(*) into v_num from wg_st,wg_cu where wg_st.COURSE_ID = wg_cu.COURSE_ID and STU_ID = :new.STU_ID and STARTTIME < v_STARTTIME and ENDTIME > v_ENDTIME; --2.学生选的课中不能有两门课的上课时间重叠
if v_num > 0 then
return;
end if;
insert into wg_st(STU_ID,COURSE_ID,SCORE) values(:new.STU_ID,:new.COURSE_ID,:new.SCORE);
end; --对课程安排
create or replace trigger trinamecu
before insert on wg_cu
for each row
declare
v_num number;
begin
select count(*) into v_num from wg_cu where ROOM = :new.ROOM and STARTTIME >= :new.STARTTIME and ENDTIME <= :new.ENDTIME; --3.上课分教室,两门课不能在重叠的时间用同一个教室ROOM
if v_num > 0 then
return;
end if;
insert into wg_cu(COURSE_ID,STARTTIME,ENDTIME,ROOM) values(:new.COURSE_ID,:new.STARTTIME,:new.ENDTIME,:new.ROOM);
end;