gpt4 book ai didi

postgresql - 将行类型的所有列重置为 NULL

转载 作者:行者123 更新时间:2023-11-29 11:47:31 25 4
gpt4 key购买 nike

我想知道是否可以批量初始化从一个类型创建的变量为 null 而无需分别初始化它们

create type tp_data as (
data01 text,
data02 integer,
data03 text
);

create function sp_function()
returns setof tp_data as
$$
declare
lr_data tp_data;
begin
for lr_data in
select data.data01, data.data02, data.data03
from data
loop
if lr_data.data01 = "cancelled" then

-- what is the correct way to do this?
lr_data.* := null;

-- without having to do this
lr_data.data01 := null;
lr_data.data02 := null;
lr_data.data03 := null;
end if;

return next lr_data;
end loop;
end
$$
language plpgsql;

调用:

select * from sp_function();

以上显然是错误的,但是在 Informix 中我可以使用类似“将 lr_data.* 初始化为 null”之类的东西。有没有办法在 plpgsql 中做类似的事情?

最佳答案

您可以分配 NULL 给整个行类型:

lr_data := null;

这会将每一列设置为 NULL

另外:您的函数中存在一些语法错误。整个功能可以从根本上简化。此查询替换了整个函数:

SELECT (CASE WHEN data01 = 'cancelled' THEN NULL::tp_data ELSE d::tp_data END).*
FROM (SELECT data01, data02, data03 FROM data) d;

我知道这不是你问题的重点。但它表明我们还可以 NULL 值转换为行类型以使所有列都为NULL

关于postgresql - 将行类型的所有列重置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com