我正在学习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 是我要从表中自动插入的列 地雷 。
答案 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;
/
希望这会有所帮助。