重置行类型的所有列设置为NULL
问题描述:
我在想,如果有可能批量初始化从一个类型为空创建的变量没有初始化它们各自独立重置行类型的所有列设置为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。
您是否尝试过使用如下方式定义您的类型:'.... data01 text DEFAULT NULL,....' –
这不会有帮助,因为数据将会填充来自sql查询的结果点。我需要能够清除所有结果返回该行后sql查询已经运行 – Trent