1

我尝试测试,但没有好的结果;

据我所知,当我使用其他包中的变量并使用回滚时,它对它没有任何影响。但是当我测试它时,它没有按预期工作

declare
begin
  for i in 1 .. 10
  loop
    begin
      otherPackage.temp :=10;      
      People.Insert_One(i_Id => v_Arr(i));
    end;    
    end loop;    
    rollback;
    dbms_output.put_line(otherPackage.temp);
end;

otherPackage.temp 默认为-1,当我在这个测试窗口中使用并使用回滚时,它显示10,更改后的值;

4

1 回答 1

4

temp您在逻辑中只使用了一次包的变量,otherPackage将值 10 分配给它。

ROLLBACK只移除 any 的效果DML。变量对orPL/SQL没有任何影响。ROLLBACKCOMMIT

因此,您得到 10 作为temp打印时的值,与您在同一会话中分配的值相同。

干杯!!

于 2019-08-26T13:07:54.913 回答