如果记录存在,则插入触发器-Oracle

如果记录存在,则插入触发器-Oracle,oracle,triggers,Oracle,Triggers,我有桌子: 部门带有部门id(编号)、部门名称(varchar)、经理id(编号)字段 员工具有员工id(编号)、姓名(varchar)、工资(编号)、经理id(编号) 我想创建一个触发器,当数据插入或更新到表员工时,它负责检查表部门中是否存在经理id 触发器可能类似于: create or update trigger manager_exists before insert or update on employees for each row begin if exists **ne

我有桌子:

部门带有部门id(编号)、部门名称(varchar)、
经理id
(编号)字段

员工具有员工id(编号)、姓名(varchar)、工资(编号)、
经理id
(编号)

我想创建一个触发器,当数据插入或更新到表员工时,它负责检查表部门中是否存在
经理id

触发器可能类似于:

create or update trigger manager_exists
before insert or update on employees 
for each row
begin
  if exists **new id** into Departments then
    INSERT DATA IN EMPLOYEES
  else
    "Error: MANAGER_ID doesnt exists in Departments"
  end if;
end manager_exists;
但是我想不出如何创建这个触发器。
注意:我需要它作为一个触发器。救命啊

我就是这样理解这个问题的:

create or replace trigger manager_exists
  before insert or update on employees
  for each row
declare
  l_mgr number;
begin
  select 1
    into l_mgr
    from dual
    where exists (select null 
                  from departments d
                  where d.manager_id = :new.manager_id
                 );
exception
  when no_data_found then
    raise_application_error(-20000, 'That manager does not exist in DEPARTMENTS');
end manager_exists;  
  
换言之:

  • 检查您试图插入到
    EMPLOYEES
    表中的
    MANAGER\u ID
    是否存在于
    DEPARTMENTS
    表中
    • 不过,这对我来说没有多大意义;我想说,您应该检查它,反之亦然-检查您试图插入到
      部门中的
      经理ID
      是否存在于
      员工表中。。。但那不是你写的(或者我误解了你说的)
  • 如果是这样的话,很好,不要做任何事情(在触发器中)<导致触发器触发的代码>插入
    更新
    语句将执行此任务
  • 如果没有,请提出错误

谢谢。发生的情况是,在“员工”表中,经理id可以包含在多个员工中,当新员工注册时,必须知道添加的经理id是否存在于“部门”表中。但我认为你是怎么做的很好,不客气。如果是这样的话,那么好吧,我很高兴它能帮上忙。