Можно ли создать триггер для вставки данных таблицы в другую таблицу в Oracle? - PullRequest
0 голосов
/ 24 июня 2018

Я изучаю Oracle, и у меня есть запрос, если, как сказано в заголовке, создайте триггер, который может вставлять данные из одной таблицы в другую таблицу. Как мне это сделать? если у меня есть эти таблицы:

create table personal(
    id_person);

create table mine(
    id_mine,
    name_mine,
    pay);

create table trip(
    id_trip,
    id_person,
    name_mine,
    date_trip);

create table assignment(
    id_assig,
    id_trip,
    pay);

Столбец оплата в таблице назначение - это столбец, который я хочу автоматически вставить из таблицы мину через курок.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Я предполагаю, что первичными ключами в ваших таблицах являются IDENTITY столбцы.

Чтобы вставить значение pay из таблицы mine в таблицу assignment, вам необходимо знать значение id_trip. Это может быть получено из значения name_mine, но я должен задаться вопросом, является ли это значение уникальным? Будет ли возвращать одно значение id_trip или может возвращать несколько значений? date_trip как-то участвует? Это все вопросы, на которые вам нужно знать ответ, чтобы правильно написать этот триггер. Тем не менее, здесь идет:

CREATE OR REPLACE TRIGGER ins_mine_pay
 AFTER INSERT ON mine
   FOR EACH ROW
BEGIN
  INSERT INTO assigment
    ( id_trip, pay )
  SELECT id_trip, :new.pay
    FROM trip
   WHERE mine_name = :new.mine_name;
END;
/

Надеюсь, это поможет.

0 голосов
/ 24 июня 2018

Затем вы можете использовать ( ДО или ПОСЛЕ ) INSERT , определенный в таблице MINE , следующим образом:

CREATE OR REPLACE TRIGGER trg_bi_ins_mine
BEFORE INSERT ON mine
FOR EACH ROW 
DECLARE
  v_assigID assignment.id_assig%type := seq_assig.nextval;
  v_tripID  assignment.id_trip%type  := seq_trip.nextval;
BEGIN         
    insert into assignment( id_assig, id_trip, pay)
    values( v_assigID, v_tripID, :new.pay);
 -- this pay in (:new.pay) comes from inserted column value of the table "mine"
END;
...