处理EXCEPTION并返回函数的结果

OTA*_*TAR 3 postgresql exception plpgsql postgresql-9.2

这是我的代码

CREATE OR REPLACE FUNCTION test_excep (arg INTEGER) RETURNS INTEGER 
AS $$
    DECLARE res INTEGER;
    BEGIN
        res := 100 / arg;

        BEGIN
            EXCEPTION
            WHEN division_by_zero 
            THEN  RETURN 999;
        END;


        RETURN res;
    END;



$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

也就是说,我需要返回"999",如果发生了除零,但这个: SELECT test_excep(0)

返回错误: division by zero CONTEXT: PL/pgSQL function test_excep(integer) line 4 at assignment

我的代码有什么问题?

Erw*_*ter 6

EXCEPTION子句需要与异常位于同一块中.

例如:

CREATE OR REPLACE FUNCTION test_excep (arg integer)
  RETURNS integer
AS
$func$
DECLARE
   res INTEGER;
BEGIN

res := 100 / arg;

RETURN res;

EXCEPTION
    WHEN division_by_zero 
    THEN  RETURN 999;

END
$func$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)


Igo*_*nko 5

这是一个正确的函数:

CREATE OR REPLACE FUNCTION test_excep (arg INTEGER) RETURNS INTEGER 
AS $$
    DECLARE res INTEGER;
    BEGIN
        res := 100 / arg;
        RETURN res;
    EXCEPTION
        WHEN division_by_zero 
        THEN  RETURN 999;
    END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

EXCEPTION 部分必须在异常所在的块内,也必须是块的最后一部分。