postgresql - AND 的参数必须是布尔类型,而不是 postgresql 中的整数类型
问题描述
这是我制作的触发功能。我在这里要做的是,如果 test_tx_out 表有变化,就会触发触发函数。一个变量被声明为布尔值,它存储真或假。然后,我使用查询检查 test_address 表中是否已经存在地址select exists(...)
并将其存储在 boolAddress 中。如果条件是 ifnew.stake_address_id AND boolAddress
为真,则执行内部语句,否则执行另一个 else 语句块,但我得到错误argument of AND must be type boolean, not type integer in postgresql
。如何将 new.stake_address_id 转换为布尔值?好吧,我想如果new.stake_address_id
不是空的或空的,那将是真的。基本上,如果有值,我希望 new.stake_address_id 为 true,否则为 false。
CREATE OR REPLACE FUNCTION test_stake_addresses_tx_out_trigger()
RETURNS trigger AS $$
DECLARE
boolAddress BOOLEAN;
BEGIN
select exists (SELECT 1 FROM test_address where address = new.address) into boolAddress;
IF new.stake_address_id AND boolAddress THEN
UPDATE test_address
SET amount = amount + new.value
WHERE NEW.stake_address_id = test_address.id;
RETURN NEW;
ELSE
INSERT INTO test_address(id,address,amount)
VALUES(new.stake_address_id,new.address,new.value);
RETURN NEW;
END IF;
end;
$$
LANGUAGE 'plpgsql';
CREATE TRIGGER test1
AFTER INSERT
ON "test_tx_out"
FOR EACH ROW
EXECUTE PROCEDURE test_stake_addresses_tx_out_trigger();
解决方案
好吧,我想如果 new.stake_address_id 不为空或为空,
整数值不是布尔值(它只能为空,不存在“空”整数)
如果您想要一个带有整数的布尔表达式,您需要将它与某物进行比较。如果要测试它是否不为空,请使用is not null
if new.stake_address_id is not null and boolAddress then
推荐阅读
- amazon-s3 - 如何在 Terraform 变量中连接 S3 存储桶名称并将其传递给主 tf 文件
- android - 绑定生成器:警告 bg8604
- html - 如何增加 Unicode 符号的高度
- c++ - 填充和保存线程之间的共享缓冲区
- reactjs - 是否可以确定参数是给定的集合类型之一?
- amazon-web-services - aws s3,为什么不列出存储桶中的所有对象?
- ios - 在 SwiftUI 中使用 Core Data
- c - C:点/箭头操作符在后台是如何工作的?
- javascript - 如何在 Tradingview 图表库中自动加载研究模板?
- python-2.7 - Elasticsearch DSL:过滤,然后在 python 中聚合