Что эквивалентно 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 ...

Другие вопросы по тегам