我希望在更新数据库上的某个字段时运行触发器,因此它会更新另一个字段(基本上我们为每个记录都有2个不同的唯一ID,所以当更改一个时,我们还需要更新另一个 - 耶!)
CREATE OR REPLACE TRIGGER trigger_name ON table AFTER
UPDATE AS
UPDATE table A
SET unique_to_update = NVL(
(SELECT b.unique_to_update_from
FROM table b
WHERE B.other_unique_id = A.unique_id_to_match
), 0);
我不知道这是否有效(非常坦率地说,我很确定它会破坏它),即使它确实如此,它也会在该表的每一次更新中运行 - 而不仅仅是我想要的那个领域。
非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
在投入生产之前测试任何东西。
这样的事情应该是你的触发器:
CREATE OR REPLACE TRIGGER trigger_name
BEFORE UPDATE of unique_id_to_match
ON table
FOR EACH ROW
AS
BEGIN
select
NVL(
(SELECT b.unique_to_update_from
FROM table b
WHERE B.other_unique_id = :new.unique_id_to_match
), 0)
into :new.unique_to_update
FROM dual;
END;
答案 1 :(得分:0)
5000行x 900列不是那么大:) 我担心它有10M的行:)
确定开始
create temporary table tmp_my_important_columns on commit delete rows
as
select unique_id_to_match, unique_to_update_from,
other_unique_id , unique_to_update
from table where rownum < 1;
第二
CREATE OR REPLACE TRIGGER trigger_before_upd_stmt
BEFORE UPDATE
ON table
AS
BEGIN
insert into
tmp_my_important_columns
select unique_id_to_match, unique_to_update_from,
other_unique_id , unique_to_update
from table;
END;
第三,
CREATE OR REPLACE TRIGGER trigger_name
BEFORE UPDATE of unique_id_to_match
ON table
FOR EACH ROW
AS
BEGIN
select
NVL(
(SELECT b.unique_to_update_from
FROM tmp_my_important_columns b
WHERE B.other_unique_id = :new.unique_id_to_match
), 0)
into :new.unique_to_update
FROM dual;
END;
评论: