首页 > 解决方案 > 从 postgresql 中的仅 SQL 存储函数引发异常

问题描述

我已经成功创建了一个名为 UDT monetary,它是两个值的复合类型,一个整数货币 ID 和一个数字金额。货币值的特殊之处在于它们与数字相同,只是您不能将来自不同货币的两个值相加。我创建了许多运算符 ( CREATE OPERATOR) 来执行加法和减法等操作,这一切都很好。

这些运算符RAISE EXCEPTION如果两个操作数的货币成分不相同。出于这个原因,我不得不在 plpgsql 中编写函数。但我更喜欢用 SQL 编写这些函数,因为我知道函数体随后会被内联到查询中。

我希望能够写出类似的东西:

create function monetary_add(a monetary, b monetary) returns monetary language sql immutable as $$
  select (a).value + (b).value where exception_if((a).currency <> (b).currency);
$$;

但我找不到可能引发异常的 SQL 函数。

当然,我可以在 plpgsql 中编写一个,但这会破坏目的。是否有内置功能可以做到这一点?我是否正确地认为在 SQL 中编写函数会导致查询执行速度更快?

标签: postgresqlstored-functions

解决方案


推荐阅读