SQL Oracle-使用CHECK或TRIGGER检查另一个表中的值



如果插入的值已经在另一个表中,如何使用CHECK(或TRIGGER?)创建表?

示例

CREATE TABLE Employee(
  Name VARCHAR(10),
  Adress VARCHAR(20)
);
CREATE TABLE Section(
  Section_name VARCHAR(10),
  Managers_name VARCHAR(10)
);

我想检查一下,插入到Managers_name的值已经在Employee中了,如果不是,那么打印错误。

我找到了任何方法,如何做到这一点,但我在Oracle中尝试的一切都没有奏效。

PRIMARY KEY约束添加到员工表,将FOREIGN KEY约束添加到部门表:

CREATE TABLE Employee(
  Name VARCHAR(10) CONSTRAINT Employee_Name_PK PRIMARY KEY,
  Adress VARCHAR(20)
);
CREATE TABLE Section(
  Section_name  VARCHAR(10),
  Managers_name VARCHAR(10)
                CONSTRAINT section_manager_fk REFERENCES Employee( Name )
);

Check约束,正如mt0所解释的,专门用于单个表。出于一致性原因,应避免触发:当您选择记录时,另一个会话可能正在删除它

外键是实现它的正确方法:在代码中捕获FK约束冲突(我想是ORA-02291),在消息中搜索"section_manager_FK",最后重写一条用户友好的错误消息。

相关内容

最新更新