Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在不存在的列中插入值_Sql_Oracle - Fatal编程技术网

Sql 在不存在的列中插入值

Sql 在不存在的列中插入值,sql,oracle,Sql,Oracle,我目前正在运行SQL plus,我有两个表 如果我在dept(nm_员工)中输入值,而dept2(nm_部门)中没有该值,那么我必须在SQL中编写PL以在dept2中输入值。我有写的代码,但它是不正确的。有什么想法吗 CREATE TABLE nm_employees( name varchar(20), dept varchar(20), CONSTRAINT empPK PRIMARY KEY (dept) ); CREATE TABLE nm_departments( dept2 var

我目前正在运行SQL plus,我有两个表

如果我在dept(nm_员工)中输入值,而dept2(nm_部门)中没有该值,那么我必须在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;

第一点是,在SQL中不使用漂亮的倒逗号。使用标准单引号(

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

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测试中的表也错误,您应该在那里签入NMU部门,而不是NMU员工

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');
就其价值而言,这看起来像一个练习,因此这里有一些额外的提示:

  • 表之间的关系应该是
    Employee[M]->--|-[1]Department
    ,即员工属于一个部门,每个部门有多个员工
  • 外键应位于引用部门的employee表中。这也意味着需要先创建department表中的记录,然后再创建employee表中的记录
  • employees中的主键(不使用代理键)应该是(姓名、部门)的组合。按照当前定义,每个部门只能有一名员工

  • 是的,这是oracle pl/SQL为什么表
    employees
    dept
    作为主键?为什么外键来自部门和员工?在我看来,情况正好相反。听起来像是众所周知的“upsert”-也许?它工作得很好,但工程师不是在nm_departments表中创建的。执行PL部分后,它表示在nm中创建了0行_departments@Nidhin_toms请看修改后的答案。我把外键和主键调换了一下。现在nm_departments表中的dept2是主键。NMU员工中的部门是外键。这更有道理