Oracle переменная связывания не установлена - PullRequest
1 голос
/ 12 февраля 2020

Я хочу использовать переменную связывания для передачи результатов блока pl sql из sqlplus (или sqldeveloper), НО, если блок завершается необработанным исключением, тогда любое предыдущее назначение переменной связывания игнорируется.

Примеры:

var testvar varchar2(30)

1.

begin
  :testvar := 'hello';
end; 
/

print testvar  -- prints hello

2.

begin
  :testvar := 'hello';
  raise program_error;
end; 
/
print testvar  -- prints null

3.

begin
  raise program_error;
exception
  when others then
    :testvar := 'hello';
end; 
/

print testvar  -- prints hello

4.

begin
  raise program_error;
exception
  when others then
    :testvar := 'hello';
    raise;
end; 
/
print testvar  -- prints null

Таким образом, если блок завершается необработанным исключением, тогда переменная связывания эффективно откатывается. Может ли это поведение по умолчанию быть изменено так, чтобы значение переменной связывания оставалось неизменным, если блок завершается с необработанным исключением?

Спасибо

...