EXCEPTION 子句在 Postgresql 12 中无法正常工作

The EXCEPTION clause is not working properly in Postgresql 12

我写了一个函数来测试 PLPGSQL 中的 TRY...EXCEPT:

CREATE OR REPLACE FUNCTION dotest(wid INTEGER, wname VARCHAR, wcost REAL) RETURNS INTEGER AS $$
    DECLARE
        wdivide REAL;
    BEGIN
        wdivide := wcost / wid;
        RETURN 10;
    EXCEPTION
        WHEN sqlstate '22012' THEN
            RETURN 1;
        WHEN sqlstate '22P02' THEN
            RETURN 2;
    END;
$$ LANGUAGE PLPGSQL;

如果我输入 wcost = 0,EXCEPTION 子句将起作用,SELECT 将 return 1.

SELECT dotest(0, 'AAAAA', 12.2);

但是如果我输入 wcost = 'something',EXCEPTION 子句不起作用。

未读取异常“22P02”。 return 应该是 2.

SELECT dotest('a', 'AAAAA', 12.2);
ERROR:  invalid input syntax for type integer: "a"
LINE 1: SELECT dotest('a', 'AAAAA', 12.2);
                      ^
SQL state: 22P02
Character: 15

有人可以帮助我了解发生了什么吗?

ps。我是 运行 Postgresql 12.

用户Bergi回答了该问题。实际上,错误发生在进入函数之前。谢谢。