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回答了该问题。实际上,错误发生在进入函数之前。谢谢。
我写了一个函数来测试 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回答了该问题。实际上,错误发生在进入函数之前。谢谢。