oracle - salida - ¿Cómo atrapar un error de restricción único en un bloque PL/SQL?
procedimientos y funciones oracle pl/sql (3)
Estoy seguro de que tiene sus razones, pero por las dudas ... también debería considerar usar una consulta de "combinación":
begin
merge into some_table st
using (select ''some'' name, ''values'' value from dual) v
on (st.name=v.name)
when matched then update set st.value=v.value
when not matched then insert (name, value) values (v.name, v.value);
end;
(modificó lo anterior para estar en el bloque de inicio / finalización, obviamente también puede ejecutarlo independientemente del procedimiento).
Digamos que tengo un bloque Oracle PL / SQL que inserta un registro en una tabla y necesita recuperarse de un error de restricción único, como este:
begin
insert into some_table (''some'', ''values'');
exception
when ...
update some_table set value = ''values'' where key = ''some'';
end;
¿Es posible reemplazar las elipsis por algo para capturar un error de restricción único?
Sospecho que la condición que está buscando es DUP_VAL_ON_INDEX
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE(''OH DEAR. I THINK IT IS TIME TO PANIC!'')
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
UPDATE