插入后如何在 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 ; ^
我正在使用 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 ; ^