0

INSERT INTO と WHERE ロジックを必要とするトリガーに取り組んでいます。

私は3つのテーブルを持っています。

不在表:

-----------------------------
|  user_id | absence_reason |
-----------------------------
|  1234567 |   40           |
|  1234567 |   50           |
|  1213    |   40           |
|  1314    |   20           |
|  1111    |   20           |
-----------------------------

会社テーブル:

-----------------------------
| user_id  | company_id     |
-----------------------------
| 1234567  |  10201         |
| 1213     |  10200         |
| 1314     |  10202         |
| 1111     |  10200         |
-----------------------------

雇用表:

--------------------------------------
| user_id  |   emp_type    |  emp_no |
--------------------------------------
| 1234567  |   Int         |    1    |
| 1213     |   Int         |    2    |   
| 1314     |   Int         |    3    |
| 1111     |   Ext         |    4    |
--------------------------------------

そして最後に、emp_type = Int in employee_table と company_id = 10200 を持つ人だけがデータを送信する必要があるテーブルを作成しました。

アウト:

--------------------------------
| employee_id | absence_reason |
--------------------------------
|  1          |    40          |
|  1          |    50          |
|  2          |    40          |
|  3          |    20          |
--------------------------------

これが私のトリガーです:

CREATE OR REPLACE TRIGGER "INOUT"."ABSENCE_TRIGGER" 
  AFTER INSERT ON absence_table 
  FOR EACH ROW
DECLARE
BEGIN
  CASE
      WHEN INSERTING THEN
           INSERT INTO out (absence_reason, employee_id)
           VALUES (:NEW.absence_reason, (SELECT employee_id FROM employment_table WHERE user_id = :NEW.user_id)
           WHERE user_id IN 
             (SELECT user_id FROM employment_table WHERE employment_type = 'INT') 
             AND user_id IN 
               (SELECT user_id FROM company_table WHERE company_id = '10200');
  END CASE;
END absence_trigger;

明らかに機能しておらず、機能させるために何をすべきかわかりません。助言がありますか?

4

2 に答える 2

4

挿入を次のように変更します。

insert into out (absence_reason, employee_id)
select :NEW.absence_reason, e.emp_no
  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';

これはうまくいくはずです。emp_noサンプル構造employee_idにはまだトリガーインサートにもあることに注意してください。私emp_noは正しいと仮定しました。またemp_typeemployment_type

最後に、トリガーcompany_idで引用符を付けます。それは本当にvarchar2ですか?もしそうならOK、そうでなければ引用符を使わないでください。

于 2013-01-07T08:07:37.847 に答える
1

括弧のバランスが取れていません。値用のものは閉じていません。これが特定のエラーの原因ですが、@ DazzaLの答えは正しい解決策のようです。

于 2013-01-07T08:06:59.687 に答える