没写过oracle的约束,不知是个什么语法。还请帮帮忙
第一个约束:A字段默认值是“PENDING”,值必须为“PENDING”、“APPROVED”、“DENIED”三者之一。
第二个约束:日期DATE_A字段>=日期DATE_B字段。
第三个约束:只有当A字段为“PENDING”时,表B中的C字段才允许为空。

解决方案 »

  1.   

    ALTER TABLE 表名 ADD (
      CONSTRAINT 约束名1
      CHECK (a='PENDING or a='APPROVED' or a='DENIED'),
      CONSTRAINT 约束名2
      check(date_a>=date_b))
    第三个不知道怎么写
    以为没有测试过
    默认值
    alter table 表名 modify a default 'PENDING'
      

  2.   

    谢了。我就是不知道是个什么语法。难道check里面可以写条件判断的?
      

  3.   

    可以写的
    我上就写过一个,判断分钟数,设定>=0,<60的
      

  4.   

    作业里面不是要求用jdeveloper生成创建语句的吗?前几天刚好做过你们的这个作业
    CREATE TABLE EXPENSEREPORT
    (
    ERNO NUMBER NOT NULL,
    ERDESC VARCHAR2(255 CHAR) NOT NULL,
    ERSUBMITDATE DATE DEFAULT sysdate NOT NULL,
    ERSTATUSDATE DATE DEFAULT sysdate NOT NULL,
    ERSTATUS VARCHAR2(8 CHAR) DEFAULT 'PENDING' NOT NULL,
    SUBMITUSERNO NUMBER NOT NULL,
    APPRUSERNO NUMBER
    )
    ;
    ALTER TABLE EXPENSEREPORT
    ADD CONSTRAINT EXPENSEREPORT_CHK1 CHECK
    (ERStatus in ('PENDING','APPROVED','DENIED'))
     ENABLE
    ;
    ALTER TABLE EXPENSEREPORT
    ADD CONSTRAINT EXPENSEREPORT_CHK2 CHECK
    (ERStatusDate >= ERSubmitDate)
     ENABLE
    ;
    ALTER TABLE EXPENSEREPORT
    ADD CONSTRAINT EXPENSEREPORT_CHK3 CHECK
    (ApprUserNo is not null and ERSTATUS in ('APPROVED','DENIED'))
     ENABLE
    ;
      

  5.   

    qq基本不用,有问题发邮件:[email protected]