图形界面下填入数据,不想写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
其他也差不多方法

解决方案 »

  1.   

    图形界面是指在Enterprise Manager Console的独立启动下点击表直接进行数据录入,不是在SQL PLUS下用SQL语句输入学生选课的问题的目的是使不合法的数据不得录入,并不是选出合法的数据,当不满足那些条件时,禁止数据录入并报错
      

  2.   

    1.怎么样约束一个字段的形式如:YYYYsX.  其中YYYY是年,必须为数字,X必须在'1'和'2'之一.
    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了!
      

  3.   

    约束的复杂的可以用触发器来实现,相对比较方便一些!
     日期
       STARTTIME  check(to_number(to_char(STARTTIME,'HH24'))>=8 and to_number(to_char     (STARTTIME,'HH24'))<=22
      sql大家也写了不少,就在此说了!
      

  4.   

    触发器:
    有两张表,一张学生(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;