tipos salida procedimientos procedimiento predefinidas parametros manejo funciones excepciones ejemplos ejecutar developer cursores con bloques almacenado oracle plsql

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