我们可以在程序中进行交易管理但是我们不能进入功能,我已经在多个地方看过这个说法,而我们要求功能&程序,但我在 oracle 和**I can see its working fine for function also**
进行了以下测试。任何人都可以让我知道我在上述陈述中遗漏了什么,因为这句话对我来说完全没错?
select * from test;
*(测试表包含单列" 名称varchar(2)")
create or replace function FUNTest
return number as result NUMBER(6,2);
BEGIN
SAVEPOINT fn_fntest;
insert into test(NAME) values('Dinesh');
ROLLBACK TO fn_fntest;
return 1;
END;
/
Begin
DBMS_OUTPUT.PUT_LINE(FUNTest());
end;
/
答案 0 :(得分:1)
功能的目的与程序不同。
现在谈论功能中的事务管理,它取决于函数的调用机制。
如果你的函数有像commit / rollback这样的事务语句,那么应该从一些其他的块中调用它,它能够处理像过程或匿名块这样的事务(你的情况)。
如果您从select语句中调用相同的函数,例如“从双重选择funtest(); ”,那么您将收到错误,因为select语句无法打开事务。
如果您仍想要从非交易主体(select语句)调用任何具有交易声明的函数,那么您的函数应该能够打开单独的独立事务(PRAGMA AUTONOMOUS_TRANSACTION)。
有关交易管理的更多信息,请参阅http://www.datacoons.com/content/transaction.php。