Я хочу написать функцию, которая вставляет случайный UUID в таблицу. Функция должна вернуть UUID после успешной установки UUID. В случае столкновения с первичным ключом я хочу, чтобы функция пыталась использовать другой UUID до тех пор, пока это не удастся.Каково имя исключения, указывающее нарушение ограничения первичного ключа?
То, что я до сих пор:
create or replace
function new_object_id return raw is
v_oid RAW(16);
begin
<<next_uuid>>
v_oid := random_uuid();
insert into object (object_id) values (v_oid);
commit;
exception
when ?primary_key_constrain_failure? then goto next_uuid
end;
return v_oid;
end new_object_id;
Но я не могу понять, правильное имя исключения, которое возникает, когда первичный ключ Ограничить нарушается. Кто-нибудь знает?
Update
Я попытался dup_val_on_index
, но у меня есть еще проблема с петлей:
create or replace
function new_object_id return raw is
v_oid RAW(16);
begin
<<next_uuid>>
v_oid := random_uuid();
insert into object (object_id) values (v_oid);
commit;
return (v_oid);
exception
when DUP_VAL_ON_INDEX then goto next_uuid;
end new_object_id;
Когда я компилирую это я получаю сообщение об ошибке:
Error(11,30): PLS-00375: illegal GOTO statement; this GOTO cannot branch to label 'NEXT_UUID'
Почему вы не делаете это специально и не читаете сообщение об ошибке? –
@DanBracuk Требуется некоторое время, пока UUID не получит свое первое столкновение. – ceving