如果记录存在则插入触发器 - 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 ......但那不是什么你写的(或者我误解了你说的)
- 如果是这样,很好,什么都不做(在触发器中);
insert
或 update
导致触发器触发的语句将完成工作
- 如果没有,报错
我有 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 ......但那不是什么你写的(或者我误解了你说的)
- 不过,这对我来说意义不大;我会说你应该检查它反之亦然 - 检查
- 如果是这样,很好,什么都不做(在触发器中);
insert
或update
导致触发器触发的语句将完成工作 - 如果没有,报错