Триггер в Oracle 10g - PullRequest
       6

Триггер в Oracle 10g

0 голосов
/ 27 июля 2011

У меня есть отношения, в которых Аккаунт, Клиент и две таблицы связаны с отношением cl_ac. Учетная запись имеет ac_id, а клиент имеет c_id в качестве первичных ключей, и эти же два ключа находятся в таблице cl_ac как внешние ключи. У меня есть триггер для первичных ключей в учетной записи (ac_id) и клиенте (c_id), так что в обеих таблицах мне нужно вставить только оставшиеся значения, а первичные ключи увеличиваются сами для каждой записи. Теперь мне нужен триггер, который автоматически вставляет значения в таблицу "cl_ac", когда я вставляю значения в учетную запись и клиент.

или другой вариант, скорее триггер, который не нарушает ограничение внешнего ключа.

Я перепробовал много вариантов, но не смог вставить 2 значения (c_id и ac_id) одновременно в таблицу cl_ac. Пожалуйста, кто-нибудь, помогите мне. Было бы лучше, если бы я мог вставить изображение для лучшего понимания, я надеюсь, я поставил вопрос в понятных словах.

Спасибо.

Ответы [ 3 ]

1 голос
/ 27 июля 2011

Как триггер узнает, какую учетную запись связать с каким клиентом?

Вам лучше вставить запись отношения из кода, который создает записи учетной записи / клиента. Вот где у вас есть необходимая информация.

1 голос
/ 27 июля 2011

возможно, вам нужно использовать RETURNING, чтобы получить оба значения, которые вы хотите вставить, а не триггер?

INSERT INTO account (ac_id,....) VALUES(seq_ac_id.NEXTVAL,....) RETURNING ac_id INTO return_account_id;
INSERT INTO client  (c_id,....) VALUES(seq_c_id.NEXTVAL,....) RETURNING c_id INTO return_client_id;
INSERT INTO relationship (ac_id,c_id) values(return_account_id, return_client_id);
COMMIT;
0 голосов
/ 28 июля 2011

Возможно, вы захотите обернуть вещь в процедуру, вроде как псевдо-код ниже

CREATE OR REPLACE PACKAGE BODY cli_acc IS
  TYPE tab_cli IS TABLE OF client%ROWTYPE;
  TYPE tab_acc IS TABLE OF account%ROWTYPE;
  PROCEDURE ins_cli_acc (i_tab_cli tab_cli, i_tab_acc tab_acc) IS
  BEGIN
    --insert all of i_tab_cli into CLIENT
    --insert all of i_tab_acc into ACCOUNT
    FOR i IN i_tab_cli.FIRST .. i_tab_cli.LAST LOOP
      FOR j IN i_tab_acc.FIRST .. i_tab_acc.LAST LOOP
         INSERT INTO cli_acc (cli_id, acc_id) 
         VALUES (i_tab_cli(i).cli_id, i_tab_acc(j).acc_id);
      END LOOP;
    END LOOP;
  END ins_cli_acc;
END cli_acc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...