firebird - 如何使用 Firebird 触发器从表中获取值
问题描述
我想从表中获取一个值并将其与 Firebird 触发器中的插入值进行比较。这是我的代码。
SET TERM ^;
CREATE TRIGGER after_in_systab FOR SYSTEMTAB
ACTIVE AFTER INSERT POSITION 0
AS
declare sys_code integer;
select sys_code from system_table;
BEGIN
/* enter trigger code here */
if(sys_code == NEW.SYSTEM_CODE) then
insert into logs(log_detail)values('code matched');
end
END^
SET TERM;^
解决方案
或者,您可以改用单数选择表达式。
CREATE TRIGGER after_in_systab FOR SYSTEMTAB
ACTIVE AFTER INSERT POSITION 0
AS
declare sys_code integer;
BEGIN
sys_code = (select sys_code from system_table);
if(sys_code == NEW.SYSTEM_CODE) then
begin
insert into logs(log_detail)values('code matched');
end
END
如果你的select
回报...
- 一行或多行,则与马克的答案相同(多行时出错)。
- 不是一行,表达式会返回
NULL
,而 Mark 的语句什么也不做(变量值没有变化)
您可能还认为 SQLSINGULAR
存在谓词以及它与EXISTS
一个谓词有何不同。
- Firebird 文档- 第4.2.3 章。存在谓词
- Interbase docs,源于旧的 pre-Firebird 文档。
如果事务回滚(由于任何数据库或网络错误,或由于应用程序命令更改),您还必须清楚地知道应该发生什么ROLLBACK
:您的 LOG 是否仍然包含有关未持久化的数据修改的记录或者 LOG 记录是否应该随着它所描述的未插入数据行而消失。
如果是前者,则必须在自治事务中插入日志记录(第 7.6.16 章)。
推荐阅读
- python - 如何将 Nonetype 放入列表中?
- java - 当我尝试进行 JPQL JOIN 查询时发生 StackOverflowError
- python - 查找项目索引的正确页面
- python - 在 Python 3.7 中使用 __init__.py 文件导入 *
- javascript - 有人可以向我解释为什么此代码返回 1
- python - 压缩元组并解压缩到相同的维度
- c++ - clang thread_local 初始化中的错误
- c# - 为什么我使用 DisplayFormat 注释验证 timepan 字段总是失败?
- javascript - 如何多次使用 int 变量(HTML)?
- objective-c - Firebase 查询未返回正确数据