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

Insert trigger if record exists - Oracle

我有 tables:

DEPARTMETS 具有 dep_id(数字)、dep_name(varchar)、manager_id(数字)字段。

EMPLOYEES with employee_id(number), name(varchar), salary(number), manager_id(number)

我想创建一个触发器,当数据插入或更新到 table 员工

触发器可能是这样的:

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;

但我不知道如何创建此触发器。 Note:I 请需要它作为触发器。帮助!

我是这样理解问题的:

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;  
  

换句话说:

  • 检查您要插入的 MANAGER_ID EMPLOYEES table 是否存在于 DEPARTMENTS table 中
    • 不过,这对我来说意义不大;我会说你应该检查它反之亦然 - 检查 MANAGER_ID 你试图插入 DEPARTMENTS 是否存在于 EMPLOYEES table ......但那不是什么你写的(或者我误解了你说的)
  • 如果是这样,很好,什么都不做(在触发器中); insertupdate 导致触发器触发的语句将完成工作
  • 如果没有,报错