Заменить нельзя, но дополнить можно:
create or replace trigger catch_unique
after servererror on database
disable
declare
l_sql_text ora_name_list_t;
l_msg varchar2(2000) := null;
l_stmt varchar2(2000) := null;
begin
if IS_SERVERERROR(1) then
/* если нужен текст ошибки, запроса и тд:
for depth in 1 .. ora_server_error_depth loop
l_msg := l_msg || ora_server_error_msg(depth);
end loop;
for i in 1 .. ora_sql_txt(sql_text) loop
l_stmt := l_stmt || sql_text(i);
end loop;
*/
raise_application_error(-20001,'Ooops!');
end if;
end;
/
sho err;
--если ошибок нет, то включаем:
alter trigger catch_unique enable;
--а теперь проверка:
SQL> insert into xt_unique1 values(1);
insert into xt_unique1 values(1)
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Ooops!
ORA-06512: at line 16
ORA-00001: unique constraint (XTENDER.SYS_C0043662) violated