전이 질문을 올렸습니다. 그러나 이제는 프로젝트 매니저가 돌아와 새로운 지침을 나에게주었습니다. 다시 말하지만, 나는 지금 조금 잃어 버렸고 그것을 연장하려고했습니다.선택 삽입으로 트리거 병합
나는 WHERE 논리를 사용하여 INSERT INTO가 필요한 트리거를 만들고 있습니다.
세 개의 테이블이 있습니다.
Absence_table :
-----------------------------
| user_id | absence_reason |
-----------------------------
| 1234567 | 40 |
| 1234567 | 50 |
| 1213 | 40 |
| 1314 | 20 |
| 1111 | 20 |
-----------------------------
company_table :
-----------------------------
| user_id | company_id |
-----------------------------
| 1234567 | 10201 |
| 1213 | 10200 |
| 1314 | 10202 |
| 1111 | 10200 |
-----------------------------
employment_table :
-------------------------------------------
| user_id | emp_type | employee_id |
-------------------------------------------
| 1234567 | Int | 1 |
| 1213 | Int | 2 |
| 1314 | Int | 3 |
| 1111 | Ext | 4 |
-------------------------------------------
그리고 마지막으로 내가 데이터를 진행해야하는 위치 테이블을에만 사람이 emp_type = Int 인에 employ_table 및 company_id = 10200
아웃 :
CREATE OR REPLACE TRIGGER "INOUT"."ABSENCE_TRIGGER"
AFTER INSERT ON arc_hrcs.absences_data
FOR EACH ROW
DECLARE
BEGIN
CASE
WHEN UPDATING THEN
MERGE INTO out o USING DUAL ON (out.user_id =:NEW.user_id)
WHEN MATCHED THEN UPDATE SET
out.employee_id = (SELECT employee_id FROM employment_table WHERE user_id = :NEW.user_id),
out.absence_reason = :NEW.absence_reason,
out.user_id = :NEW.user_id
WHEN NOT MATCHED THEN
insert into out (absence_reason, employee_id)
select :NEW.absence_reason, e.employee_id
from employment_table e
inner join company_table c
on c.user_id = e.user_id
where e.user_id = :NEW.user_id
and e.emp_type = 'INT'
and c.company_id = '10200';
END CASE;
END absence_trigger;
내가 병합 구문에 따라 THEN MATCHED 코드하지 않을 경우 이후의 코드를 변경하는 방법을 알아낼 수 없습니다 : 여기
-------------------------------------------
| employee_id | absence_reason | user_id |
-------------------------------------------
| 1 | 40 | 1234567 |
| 1 | 50 | 1234567 |
| 2 | 40 | 1213 |
| 3 | 20 | 1314 |
-------------------------------------------
내 트리거입니다. 약간의 가이드가 나를 도울 것입니다 :-)
미리 감사드립니다.
가 왜 사용자 1234567에 대한 두 개의 서로 다른 absence_reasons이 있습니까 :
나뿐만 병합을 다시 것? presence_table/out에서 동일한 사용자에 대해 두 개의 행을 갖는 것이 합리적입니까? –