私は以前にこの質問を投稿しました。しかし今、私のプロジェクトマネージャーが戻ってきて、新しい一連の指示をくれました。繰り返しになりますが、私は今少し迷っていて、ある程度修正しようとしました。
WHEREロジックでINSERTINTOを必要とするトリガーに取り組んでいます。
私は3つのテーブルを持っています。
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 |
-------------------------------------------
そして最後に、employment_tableにemp_type = Intがあり、company_id=10200の人だけがデータを送信する場所を示すテーブルがあります。
アウト:
-------------------------------------------
| employee_id | absence_reason | user_id |
-------------------------------------------
| 1 | 40 | 1234567 |
| 1 | 50 | 1234567 |
| 2 | 40 | 1213 |
| 3 | 20 | 1314 |
-------------------------------------------
これが私のトリガーです:
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;
WHEN NOT MATCHED THENコードの後に、マージ構文に従ってコードを変更する方法がわかりません。少しのガイドが私を助けてくれるでしょう:-)
前もって感謝します。