如何声明具有非空检查约束的用户定义域类型的变量

时间:2018-12-06 00:57:51

标签: postgresql plpgsql

我定义了一个从复合类型派生的域,该域具有CHECK约束,以防止其组件值之一为空。我想编写一个具有这种类型的变量的plpgsql语言函数。我没有声明这样的变量。

这是给我相同错误消息的情况的简化示例:

auto id

我感到困惑的是,无法将plpgsql变量绑定到具有非null约束的域类型的值吗?我很难相信PostgreSQL会有这样的限制。

注意:在我的实际应用程序中,我想为变量分配INSERT语句的返回值,因此在DECLARE块内分配值似乎不合适。

1 个答案:

答案 0 :(得分:0)

您可以在DECLARE部分中初始化变量:

CREATE FUNCTION myfunc() RETURNS myint LANGUAGE plpgsql AS $$
  DECLARE
    notnullint myint = 0;
  BEGIN
    notnullint := 1;
    RETURN notnullint;
  END
$$;
  

注意:在我的实际应用程序中,我想为变量分配INSERT语句的返回值,因此在DECLARE块内分配值似乎不合适。

我不明白这种逻辑。在这种情况下,必须初始化变量,而您别无选择。当然,您可以在函数主体中为其分配另一个值。