4

有什么方法可以测试未分配的空记录吗?(抱歉,sqlfiddle 不喜欢我的 DO 块。)谢谢。

DO
$$
DECLARE
r record;
BEGIN

r := null;

if r is null    -- ERROR:  record "r" is not assigned yet
then
end if;

END
$$;
4

3 回答 3

9

可以通过编写来避免该错误:

   select null into r;

或者:

   r:=row(null);

这样就r可以使用元组结构进行初始化。

不过,请注意,记录变量在与 NULL 相关的其他方面是不直观的,并且通常难以在其基本用例之外使用(游标式迭代)。

于 2015-06-14T16:16:45.433 回答
1

如果您使用异常处理程序包装测试,则可以使用“未初始化”错误为您进行检查。

DO $$
DECLARE
r record;
BEGIN

r := null;

  BEGIN
    IF r IS NOT NULL THEN
        raise notice 'R IS INITIALIZED';
    END IF;
  EXCEPTION
    WHEN OTHERS THEN
        raise notice 'R IS NOT INITIALIZED';
  END;

END
$$;
于 2015-06-11T16:56:22.223 回答
0
select *
from t
where id = p_id
into r;

if found then
...
else
...
end if;

https://www.solvingsoftware.dev/testing-for-an-empty-record-variable-in-postgresql/

于 2020-10-18T03:10:30.297 回答