2

我目前在 SQL plus 上运行,我有 2 个表。

如果我将值输入到部门 (nm_employees) 并且如果该值在部门 2 (nm_departments) 中不存在,那么我必须在 SQL 中编写一个 PL 以在部门 2 中输入值。我写了代码,但它不正确。有任何想法吗?

CREATE TABLE nm_employees(
name varchar(20),
dept varchar(20),
CONSTRAINT empPK PRIMARY KEY (dept)
);

CREATE TABLE nm_departments(
dept2 varchar(20),
CONSTRAINT departments FOREIGN KEY (dept2) REFERENCES nm_employees(dept)
);

INSERT INTO nm_employees values ('nancy','engineer');
IF NOT EXISTS (SELECT dept FROM nm_employees where dept='engineer'
)
THEN    
INSERT INTO nm_departments values ('engineer');
END IF;
4

1 回答 1

6

第一点是您不要对 SQL 使用花哨的引号。使用标准单引号 ( ')。

第二点是 IF..THEN 仅用于编程块,如触发器。在常规 SQL 批处理中,您可以使用INSERT...SELECT.

CREATE TABLE nm_employees(
name varchar(20),
dept varchar(20),
CONSTRAINT empPK PRIMARY KEY (dept)
);

CREATE TABLE nm_departments(
dept2 varchar(20),
CONSTRAINT departments FOREIGN KEY (dept2) REFERENCES nm_employees(dept)
);


INSERT INTO nm_employees values ('nancy','engineer');

INSERT INTO nm_departments
select 'engineer' from dual
WHERE NOT EXISTS (SELECT dept FROM nm_departments where dept2='engineer');


您在 EXISTS 测试中也有错误的表,您应该在其中检查nm_departments,而不是nm_employees

对于它的价值,这看起来像是一个练习,所以这里有一些额外的提示:

  1. 表之间的关系应该是Employee [M] ->--|- [1] Department,即员工属于一个部门,每个部门有很多员工
  2. 外键应该在员工表引用部门中。这也意味着department表中的记录需要在employee中的记录之前创建
  3. 员工中的主键(不使用代理键)应该是(姓名,部门)的组合。按照目前的定义,每个部门只能有一名员工
于 2012-11-22T23:59:41.783 回答