Я уверен, что у вас есть свои причины, но на всякий случай ... вам также следует рассмотреть возможность использования запроса "слияния":
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;
(изменил вышеперечисленное в блоке начала / конца; очевидно, вы можете запускать его независимо от процедуры).