임의의 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;
하지만 기본 키 제약을 위반 때 발생하는 예외에 대한 올바른 이름을 알아낼 수 없습니다. 아무도 몰라?
업데이트
나는 dup_val_on_index
을 시도하지만, 난 여전히 루프에 문제가 있습니다 this에 따르면
Error(11,30): PLS-00375: illegal GOTO statement; this GOTO cannot branch to label 'NEXT_UUID'
왜 실수로 하나를 수행하고 오류 메시지를 읽지 않습니까? –
@DanBracuk UUID가 첫 번째 충돌을 일으킬 때까지 약간의 시간이 걸립니다. – ceving