首页 > 解决方案 > 在注册表中添加一列

问题描述

请参考以下架构并将字段 - 具有日期类型的 DOC 添加到注册表。

确保 DOC 大于 DOJ。(注:DOC - 完成日期)。

这是架构。

课程招生管理

这是我的代码

alter table registration add doc date
  add constraint registration_chk_date check(doc>doj);

当我编译并运行上面的代码时,给了我改变的结果表,但是从上面的代码来看,我的测试用例根本没有通过。谁能告诉我哪里出错了?

以下是我在评估上述代码后得到的测试用例。

测试用例 1 - 列名和数据类型检查

检查列的数据类型

Table
COLUMN_NAME
------------------------------
COURSEID
DOC
DOJ

测试用例 2 - 列约束检查

检查列的约束

COLUMN_NAME
------------------------------
COURSEID
DOC
DOJ
STUDID

测试用例 3 - 列约束名称检查 检查列的约束名称

COLUMN_NAME
------------------------------
COURSEID
DOC
DOJ
STUDID

标签: oracleddlalter

解决方案


我不确定您使用的是 PK 和 FK 以外的约束,但请注意结果中的最后一行。DOJ 中允许使用 Null 值,这可能会导致您的测试用例失败。

CREATE TABLE registration(
    courseid   NUMBER(4),
    studid     NUMBER(4),
    doj        DATE
)
/

    INSERT INTO registration VALUES(
        1001,
        100,
        sysdate
    );
/

ALTER TABLE registration ADD doc DATE;

ALTER TABLE registration ADD CONSTRAINT registration_chk_date CHECK(doc > doj);

INSERT INTO registration VALUES(
    1001,
    100,
    sysdate + 1,
    sysdate + 1
);

INSERT INTO registration VALUES(
    1001,
    100,
    sysdate,
    sysdate + 1
);

INSERT INTO registration(
    courseid,
    studid,
    doc
)VALUES(
    1002,
    101,
    sysdate
);

SELECT *
FROM registration;

在此处输入图像描述


推荐阅读