在执行postgresql函数时返回错误值的语法

时间:2015-12-30 14:56:31

标签: sql postgresql function exception error-handling

我是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';

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

1 个答案:

答案 0 :(得分:1)

评论太长了。

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

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

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

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