Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在Postgres中尝试捕获等效物_Postgresql_Try Catch - Fatal编程技术网

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删除它们..谢谢!这就是我需要的!