更新一个 table 中的列时,如何通过触发器更新多个 table?

How can I update multiple tables via a trigger when updating a column in one table?

我在 Oracle 数据库 10g 中有两个 table。我想通过更新 base_information table.

中的余额来更新 table 中的余额

我想用触发器来做这个,但我不明白我该怎么做。

Table 1:

Create TABLE Base_information
(
  account_no varchar2(40) primary key
    check(REGEXP_LIKE(account_no, '[A-Za-z][0-9]{13}')),
  first_name varchar2(25) unique not null
  last_name varchar2(25), 
  address varchar2(40) not null, 
  contact_no varchar2(15) not null
    check(REGEXP_LIKE(contact_no, '[+][0-9]{13}')), 
  code varchar2(20) , 
  balance double precision, 
  online_account varchar2(15)   
);

Table 2:

Create TABLE User_table
(
  account_no varchar2(40)
    check(REGEXP_LIKE(account_no, '[A-Za-z][0-9]{13}')),
  balance double precision,
  transfer_to varchar2(40)
    check(REGEXP_LIKE(transfer_to , '[A-Za-z][0-9]{13}')),
  transfered_amount double precision,
  transfer_date Timestamp,
  user_id varchar2(20),
  CONSTRAINT rfk1 foreign key(user_id) references Login_table (user_id),
  CONSTRAINT rfk2 foreign key(account_no) references Base_information(account_no)
);

我们将不胜感激。

正如其他人所说,最好在两个单独的语句中完成。
无论如何,如果您仍然对如何以这种方式做到这一点感兴趣,您可以这样做:

CREATE OR REPLACE TRIGGER COSO_BT
 BEFORE UPDATE
 ON BASE_INFORMATION REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
BEGIN
    if :new.balance != :old.balance
      then 
            update USER_TABLE
               set balance = :new.balance
             where account_no = :new.account_no;
    end if;

END;
/

如您所见,当您更新 base_information table 时,如果新余额值与旧余额值不同,user_table [=21 中的余额值=] 更新为相应 account_no 记录中的新值。
对不起我的英语。
希望这对您有所帮助!