0

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

Parent(id, name, occupation)

Child(id, name, gender,parent_id, parent_name, parent_occupation)

子に値を挿入するために、chi クエリを実行します

insert into Child(id,name,gender,parent_id) values(10,'XYZ','Male',15);

したがって、私の要件は、この挿入クエリが実行されると、トリガーが実行され、ID 15 (子レコードのparent_id) の親テーブルから名前と職業を取得し、それをそれぞれフィールドparent_nameとparent_occupationに新しく挿入された行に追加することです。

データベースとして Oracle 11g を使用しています。

4

1 に答える 1

2

これに似たものが必要です (ただし、例外を処理するコードを追加する必要があります)。

CREATE OR REPLACE
TRIGGER ai_child_tg
AFTER INSERT ON child
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
   SELECT name,
          occupation
     INTO :NEW.parent_name,
          :NEW.parent_occupation
     FROM parent
    WHERE id = :NEW.parent_id;
EXCEPTION
   WHEN no_data_found
   THEN
        <handle_your_exception_>
END ai_child_tg;

ただし、CHILDテーブルが実際にはテーブルのリレーショナルの子PARENTであり、(列を介して) FK リレーションシップが設定されている場合、テーブルに列と列をCHILD.PARENT_ID格納することは論理的に冗長です。PARENT_NAMEPARENT_OCCUPATIONCHILD

なぜCHILDテーブルにこれらの 2 つの列があるのか​​ を尋ねたいと思います。

それが役に立てば幸い...

于 2012-04-05T08:49:13.793 に答える