【问题标题】:Postgres unassigned record, is there a way to test for null?Postgres未分配记录,有没有办法测试null?
【发布时间】:2015-06-11 16:24:12
【问题描述】:

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

DO
$$
DECLARE
r record;
BEGIN

r := null;

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

END
$$;

【问题讨论】:

标签: postgresql postgresql-9.3 sql-null


【解决方案1】:

可以通过这样写来避免错误:

   select null into r;

或者:

   r:=row(null);

这样r 会被初始化为一个元组结构。

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

【讨论】:

  • 我从来没有尝试过这样的事情。谢谢 !我实际上是在尝试遍历一组数据并分成两组数据,所以它有点像游标(我猜。)
【解决方案2】:

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

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
$$;

【讨论】:

  • 我的替代方法是声明一个布尔值来跟踪记录的初始化状态,这将更容易出错但可能比异常更具可读性(最终我将有一个长列表 if ...elsif... 语句测试许多不同的变量。)谢谢!
【解决方案3】:
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/

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多