Postgresql 在Postgres中尝试捕获等效物
我需要清除(删除特殊字符)并将文本转换为数字。 但是,如果无法执行转换,则需要将错误保存在变量中,以便稍后与其他错误一起插入到表的元组中Postgresql 在Postgres中尝试捕获等效物,postgresql,try-catch,Postgresql,Try Catch,我需要清除(删除特殊字符)并将文本转换为数字。 但是,如果无法执行转换,则需要将错误保存在变量中,以便稍后与其他错误一起插入到表的元组中 CREATE OR REPLACE FUNCTION TEST(V1 TEXT, OUT ERRO TEXT) RETURNS TEXT LANGUAGE plpgsql AS $$ DECLARE V2 NUMERIC; MSG TEXT; BEGIN --"TRY" V2 :=
CREATE OR REPLACE FUNCTION TEST(V1 TEXT, OUT ERRO TEXT)
RETURNS TEXT
LANGUAGE plpgsql
AS
$$
DECLARE
V2 NUMERIC;
MSG TEXT;
BEGIN
--"TRY"
V2 := REPLACE(REGEXP_REPLACE(V1, '[^,.0-9]+', '', 'g'),',','.');
--"CATCH"
MSG = 'CONVERSION FAILED';
SELECT MSG INTO ERRO;
END;
$$;
SELECT * FROM TEST('65,^%F,5');
--EXPECTED: 'CONVERSION FAILED'
SELECT * FROM TEST('65^%F,5');
--EXPECTED: 65.5
Try…Catch在Postgres中作为带有异常处理的代码块实现。对于这种情况,我们捕捉到的错误可以将正则表达式生成的字符串转换为数值。下面进行转换,将其转换回字符串以匹配返回值
create or replace function test(v1 text)
returns text
language plpgsql
as
$$
declare
erro text ;
begin
begin -- try
erro:= (replace(regexp_replace(v1, '[^,.0-9]+', '', 'g'),',','.')::numeric)::text;
exception -- catch
when invalid_text_representation then -- error that can be handeled
erro = 'CONVERSION FAILED';
end ; -- try..catch
return erro;
end;
$$;
%F
发生的情况是否可能重复?您对失败转换的定义是否与模式不匹配?“%F”这些只是字符串中的特殊字符。Regexp删除它们..谢谢!这就是我需要的!