Triggers Firebird触发器:修改值&;插入记录
我目前在Firebird是新手,尤其是在trigger。通常我在脚本中手动完成这项工作,但我非常喜欢用触发器创建它 请让我先解释一下我的桌子 ***STOCK*** CODE NAME TOTAL GOOD BROKEN SERVICE ***DETAIL*** ID STOCK_CODE SERIAL ***BROKEN*** DETAIL_ID MARK ***SERVICE*** DETAIL_ID START_DATE END_DATE COST ***LOGS*** DETAIL_ID MARK START_DATE END_DATE COST ***股票*** 代码 名称 全部的 好 破碎的 服务 ***细部*** 身份证件 股票代码 电视连续剧 ***破碎的*** 详细信息 做记号 ***服务*** 详细信息 开始日期 结束日期 成本 ***日志*** 详细信息 做记号 开始日期 结束日期 成本 现在我的问题是:Triggers Firebird触发器:修改值&;插入记录,triggers,firebird,Triggers,Firebird,我目前在Firebird是新手,尤其是在trigger。通常我在脚本中手动完成这项工作,但我非常喜欢用触发器创建它 请让我先解释一下我的桌子 ***STOCK*** CODE NAME TOTAL GOOD BROKEN SERVICE ***DETAIL*** ID STOCK_CODE SERIAL ***BROKEN*** DETAIL_ID MARK ***SERVICE*** DETAIL_ID START_DATE END_DATE COST ***LOGS*** DETAIL_ID
以下是两个触发器:
CREATE TRIGGER bi_broken FOR broken
BEFORE INSERT
POSITION 0
AS
BEGIN
UPDATE stock SET good = good - 1, broken = broken + 1
WHERE code = (SELECT d.stock_code
FROM detail d WHERE d.id = NEW.detail_id);
END
CREATE TRIGGER bd_service FOR service
BEFORE DELETE
POSITION 0
AS
BEGIN
INSERT INTO logs (detail_id, mark, start_date, end_date, cost)
SELECT detail_id, (SELECT b.mark FROM broken b WHERE b.detail_id = OLD.detail_id),
start_date, end_date, cost
FROM service
WHERE detail_id = OLD.detail_id;
END
顺便问一下,把马克放在一个单独的表格里的原因是什么?它属于股票,不是吗?对不起,我是说在插入之后,而不是插入之前。是的,你说得对。它应该属于股票。:)但是,有一个问题。断开上的详细信息\u ID与详细信息上的ID等效。应该是code=NEW.code\u id.但是怎么做呢?对不起,我对触发器真的很陌生。“d”和“b”是什么意思?d、 id、b.detail\u id等。是否应该是表名?e、 g、库存代码、详细信息、id?谢谢。哦,我明白了。直接使用表名可以吗?为什么?别名用于在同一个表多次涉及的查询中区分表。感谢您的帮助,Andrei先生。我真的很感激。:)