2017-02-14 13 views
1

В моем коде довольно много кода RAISE EXCEPTION '...' USING ERRCODE='....', так как я могу использовать код ошибки в своем коде на C#. Тем не менее, я хотел бы использовать его теперь в моей plpgsql коде, как это:Поднять и поймать определенные пользователем исключения

BEGIN 
    ... 
    RAISE EXCEPTION 'Something is wrong' USING ERRCODE='S0001'; 

EXCEPTION WHEN 'S0001' THEN 
    -- Handle code S0001 
END; 

Но это не работает. Как я могу улавливать и обрабатывать свои собственные исключения в plpgsql?

ответ

2

Ваше исключение пункт обработки должен выглядеть следующим образом:

EXCEPTION 
    WHEN SQLSTATE 'S0001' 
    THEN 
     ... 
END; 
3

Используйте sqlstate и т.д .:

drop function if exists test(); 
create or replace function test() 
returns int language plpgsql as $$ 
begin 
    raise exception using errcode = 50001; 
    return 0; 
    exception when sqlstate '50001' then 
     return sqlstate; 
end $$; 

select test(); 

test 
------- 
50001 
(1 row)