插入后如何在 Firebird 触发器中 select 列名

How to select column name in Firebird trigger after insert

我正在使用 Firebird 触发器。我想在插入触发器后在 party_id 的基础上获取 party_name。并将 party_name 插入日志 table。这是我的代码。

SET TERM ^ ;
CREATE TRIGGER cash_after_insert CASH_FLOW 
AFTER INSERT 
POSITION 0 
AS
DECLARE getPartyName for
(select party_name from party where party_id=NEW.party_id);
BEGIN
insert into logs(date,username,logs)values('now',getPartyName,'added data');
END^
SET TERM ; ^

您正在声明 a cursor, which requires additional statements (OPEN, FETCH, and CLOSE) 以实际检索值。相反,您可以使用 select 表达式,这比使用显式游标要简单得多:

insert into logs(date,username,logs) values (
  'now', 
  (select party_name from party where party_id = NEW.party_id), 
  'added data');

顺便说一句,您在问题中使用的语法不正确(或至少不完整)。例如create trigger语句应该是CREATE TRIGGER cash_after_insert for CASH_FLOW,游标声明漏了CURSOR关键字(DECLARE getPartyName cursor for ...),而date是保留字,所以需要加引号("DATE").

换句话说,使用:

SET TERM ^ ;
CREATE TRIGGER cash_after_insert for CASH_FLOW 
AFTER INSERT 
POSITION 0 
AS
BEGIN
insert into logs ("DATE", username, logs) values (
  'now', 
  (select party_name from party where party_id = NEW.party_id),
  'added data');
END^
SET TERM ; ^