我是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';
任何建议都将不胜感激。感谢。
答案 0 :(得分:1)
评论太长了。
SQL Server和Postgres都支持异常处理。您选择不在SQL Server代码中使用异常处理。您应该就使用异常(在任一数据库中)做出有意识和明智的决定。
SQL Server存储过程默认返回整数,这些可用于状态。 Postgres没有存储过程,只有&#34;存储函数,因此您需要对返回值更加明确。 Postgres中与存储过程最接近的等价物是返回整数的函数。
切换到异常而不是使用返回值在本地处理异常是有利有弊的(如果您的事务跨越代码块,则要格外小心)。我认为Postgres中的异常处理更加强大:SQL Server错过了某些类型的异常。
但是,您可以使用任一脚本语言实现任一方法。如果切换到使用异常,请在执行此操作之前考虑问题。也就是说,不要反复进行切换。如果确实切换到异常处理,也请更改SQL Server代码 - 假设您同时维护两个代码库。