Firebird - 在插入触发器之前使用主表来对细节记录求和

时间:2013-04-14 03:04:45

标签: sql stored-procedures firebird

我有两张桌子,主人和细节。在插入新的主记录后,使用触发器自动创建详细信息表记录。

但我需要为主表创建Before Insert or Update触发器(称之为T1),以根据主记录中的字段和其详细记录中的总和进行一些计算。

我的问题是能够在T1中进行计算我需要先插入详细信息记录,但当然详细记录对主表ID有外键约束,这会阻止此操作,所以您认为实现这一任务的最佳方法?

1 个答案:

答案 0 :(得分:2)

我认为最好的方法是使用一个完成所有工作的存储过程...... 像这样的东西:

create procedure insert_record(id integer, ...);
as
begin
    /* this inserts master and through triggers creates detail */
    insert into master (id, ... ) 
    values (:id, ...);

    /* calculate values */
    select sum(...) from detail
    where id = :id
    into :calculation;

    /* usa calculated value to update master table */
    update master
    set calculated_value = :calculation
    here id = :id;
end