这是我的代码
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;
也就是说,我需要返回“999”,如果发生了除零,但是这个:SELECT test_excep(0)
返回错误:division by zero
CONTEXT: PL/pgSQL function test_excep(integer) line 4 at assignment
我的代码有什么问题?
答案 0 :(得分: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;
答案 1 :(得分:4)
这是一个正确的功能:
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;
EXCEPTION
部分必须位于异常所在的块内,并且也必须是块的最后部分。