【问题标题】:syntax to return value for error while preforming postgresql function在执行 postgresql 函数时返回错误值的语法
【发布时间】:2016-04-04 13:31:40
【问题描述】:

我是 Postgresql 的新手,正在尝试编写一个调用另一个函数的函数,如果该函数有任何错误,则返回 -1。我来自 T-SQL 背景,本质上想要相当于

CREATE PROCEDURE [dbo].[p_newproc] 
AS 
BEGIN
EXEC p_seed_table 
IF @@ERROR <> 0   
RETURN -1
... 
END

到目前为止,我发现我可能会使用以下内容:

CREATE OR REPLACE FUNCTION public.fn_newfunc() 
RETURNS void 
AS 
$$ 
BEGIN  
PERFORM fn_seed_table();  
EXCEPTION 
WHEN 
SQLSTATE <> '00000' 
RAISE EXCEPTION '-1'; 
End; 
$$ 
LANGUAGE 'plpgsql';

任何建议将不胜感激。谢谢。

【问题讨论】:

    标签: sql postgresql function exception error-handling


    【解决方案1】:

    评论太长了。

    SQL Server 和 Postgres 都支持异常处理。您选择不在 SQL Server 代码中使用异常处理。对于使用异常(在任一数据库中),您应该做出有意识且明智的决定。

    SQL Server 存储过程默认返回整数,这些可用于状态。 Postgres 没有存储过程,“只有”存储函数,因此您需要更明确地了解返回值。 Postgres 中与存储过程最接近的等价物是返回整数的函数。

    切换到异常而不是使用返回值在本地处理异常有利有弊(如果您的事务跨越代码块,请格外小心)。我认为 Postgres 中的异常处理更加健壮:SQL Server 遗漏了某些类型的异常。

    但是,您可以使用任一脚本语言实现任一方法。如果您切换到使用异常,请在这样做之前考虑问题。也就是说,不要只是反射性地进行切换。如果您确实切换到异常处理,还要更改 SQL Server 代码——假设您同时维护两个代码库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 2020-07-22
      • 2012-12-13
      • 1970-01-01
      • 2017-12-11
      相关资源
      最近更新 更多