1

我正在尝试定义一个列类型为 UUID ( CHAR(16) CHARACTER SET OCTETS) 的表。通读 Firebird 3.0 开发者指南后,我发现只支持上下文变量/简单表达式/常量。我想知道是否有一种方法可以在表上定义默认约束以调用GEN_UUID()以分配 UUID 以进行插入?

4

1 回答 1

0

您不能使用DEFAULT子句来执行此操作,因为它只允许使用文字和 Firebird 文档中称为'context variables'的选定数量。

要执行您想要的操作,您需要创建一个插入前触发器来生成值。像这样的东西:

create trigger bi_yourtable before insert on yourtable
as
begin
  new.uuid_column = gen_uuid();
end

或者,如果您不想无条件生成 UUID:

create trigger bi_yourtable before insert on yourtable
as
begin
  if (new.uuid_column is null) then
  begin
    new.uuid_column = gen_uuid();
  end
end
于 2021-10-14T08:38:14.947 回答