是否可以创建触发器以在Oracle中的另一个表上插入表的数据?

时间:2018-06-23 22:24:19

标签: oracle plsql database-trigger

我正在学习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);

分配 中的列 pay 是我要从表中自动插入的列 地雷

2 个答案:

答案 0 :(得分:2)

然后,您可以使用在表 MINE 上定义的( Berfore AFTER INSERT 触发器作为以下:

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;

答案 1 :(得分:0)

我假设您表上的主键是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;
/

希望这会有所帮助。