我尝试从表初始化变量,但当查询结果返回0时,行大小写表达式不起作用,例如:
do $$
declare _reportId bigint := null;
_serviceId bigint := null;
begin
_serviceId := 12;
_reportId := null;
select case when _serviceId is null then rp.value::bigint else _serviceId end
into _serviceId
from rep.reportparameters as rp
where rp.reportid = _reportId;
RAISE NOTICE '%', _serviceId;
end;
$$;
因此,在此参数变体中,我需要_serviceId
值12(因为查询结果返回0行,表中没有带空值的reportId)。但我有_serviceId
的null
值
SQL Server中的模拟构造工作得很好,它们为@serviceId
返回12:
DECLARE @reportId bigint = NULL,
@serviceId bigint = null;
SET @serviceId = 12;
SELECT CASE when @serviceId is null then rp.[value] else @serviceId end
from rep.reportparameters as rp
where rp.reportid = @reportId;
SELECT @serviceId
为什么在PostgreSQL的情况下不工作?
1条答案
按热度按时间stszievb1#
如手册中所述,如果没有返回行,则INTO赋值将变量设置为NULL。如果没有选择行,则CASE表达式永远不会求值,因此它不能将NULL值更改为其他值。
您可以将
coalesce()
用于直接赋值: