我在Oracle数据库10g中有两个表。我想通过更新base_information
表中的余额来更新两个表中的余额。
我想使用触发器执行此操作,但我无法理解如何才能执行此操作。
表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)
);
表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)
);
任何帮助将不胜感激。
答案 0 :(得分:0)
正如其他人所说,最好在两个单独的陈述中做到这一点 无论如何,如果你仍然对如何以这种方式做到这一点感兴趣,你可以这样做:
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表时,如果新余额值与旧余额值不同,则user_table表中的余额值将使用相应account_no记录中的新值进行更新。
对不起我的英文。
希望这有帮助!