Что эквивалентно PRAGMA EXCEPTION в postgresql?
Как реализовать прагму exception_init для postgresql. При написании кода для оракула, который я хочу перенести в postgresql, я хочу использовать определяемые пользователем исключения или коды ошибок вместо кодов ошибок PostgreSQL.
declare
not_dropable exception;
pragma exception_init (not_dropable, -942);
begin
execute immediate 'drop table &t' ;
exception
when not_dropable then
dbms_output.put_line ( 'Table &t does not exist ' );
end;
1 ответ
В Postgres нет прямого эквивалента.
Единственный вариант, который у вас есть, это проверить код ошибки. Несуществующая таблица сообщается с SQLSTATE 42P01
или имя undefined_object
Эквивалент будет примерно таким:
do
$$
declare
l_tablename text := '....';
begin
execute format('drop table %I', l_tablename);
exception
when undefined_object then
raise notice 'Table % does not exist', l_tablename;
end;
$$
В качестве альтернативы вы можете проверить код ошибки напрямую when sqlstate '42704' then ...