我想写一个函数,将随机的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
但我仍与环路的一个问题:
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'
你为什么不故意做一个故事并阅读错误信息? – 2014-10-16 12:08:28
@DanBracuk UUID首次碰撞需要一些时间。 – ceving 2014-10-16 12:15:41