我目前正在运行SQL plus,我有2个表。
如果我在dept2(nm_employees)中输入值,如果dept2(nm_departments)中没有该值,那么我必须在SQL中编写一个PL来输入dept2中的值。我写了代码,但是不正确。任何想法?
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;
答案 0 :(得分: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 。
对于它的价值,这看起来像是一个练习,所以这里有一些额外的指示:
Employee [M] ->--|- [1] Department
,即员工属于一个部门,每个部门都有很多员工