"raise exception" 是从 pgplsql 到 node-postgres 的错误 return 的唯一方法吗?
Is "raise exception" the only way to return an error from pgplsql to node-postgres?
说,我有一个 pgplsql 函数(例如 buyItem
),它 returns 一些东西(例如购买的项目参数)。在某些情况下,我想指出出了什么问题,所以结果是空的(例如,没有足够的钱来购买所需的物品)。这只是一个常见的结果,我不会将其称为异常(并且绝对不会像 raise exception
那样在数据库服务器上打印有关它的错误)。
所以问题是:处理此类情况的最佳做法是什么?
您的两个选择是引发异常,或者return包含成功和错误信息的记录:
CREATE OR REPLACE FUNCTION buyItem(itemId integer)
RETURNS RECORD
AS $$
DECLARE
result RECORD;
BEGIN
IF itemId > 0 THEN
SELECT 'purchase successful', NULL INTO result;
ELSE
SELECT NULL, 'purchase failed' INTO INTO result;
END IF;
RETURN result;
END;
$$ LANGUAGE plpgsql;
这里有更多 returning 记录的例子:Return multiple fields as a record in PostgreSQL with PL/pgSQL
说,我有一个 pgplsql 函数(例如 buyItem
),它 returns 一些东西(例如购买的项目参数)。在某些情况下,我想指出出了什么问题,所以结果是空的(例如,没有足够的钱来购买所需的物品)。这只是一个常见的结果,我不会将其称为异常(并且绝对不会像 raise exception
那样在数据库服务器上打印有关它的错误)。
所以问题是:处理此类情况的最佳做法是什么?
您的两个选择是引发异常,或者return包含成功和错误信息的记录:
CREATE OR REPLACE FUNCTION buyItem(itemId integer)
RETURNS RECORD
AS $$
DECLARE
result RECORD;
BEGIN
IF itemId > 0 THEN
SELECT 'purchase successful', NULL INTO result;
ELSE
SELECT NULL, 'purchase failed' INTO INTO result;
END IF;
RETURN result;
END;
$$ LANGUAGE plpgsql;
这里有更多 returning 记录的例子:Return multiple fields as a record in PostgreSQL with PL/pgSQL