我们可以在程序中进行交易管理但是我们不能进入功能吗?

时间:2017-05-30 06:15:37

标签: sql oracle transactions

我们可以在程序中进行交易管理但是我们不能进入功能,我已经在多个地方看过这个说法,而我们要求功能&程序,但我在 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;
/

1 个答案:

答案 0 :(得分:1)

功能的目的与程序不同。

  1. 功能:假设做一些计算并返回一些值(大多数 案件)
  2. 程序:根据数据/列执行一些操作。它也管理事务,因为你肯定会在某处存储新数据。
  3. 现在谈论功能中的事务管理,它取决于函数的调用机制。

    如果你的函数有像commit / rollback这样的事务语句,那么应该从一些其他的块中调用它,它能够处理像过程或匿名块这样的事务(你的情况)。

    如果您从select语句中调用相同的函数,例如“从双重选择funtest(); ”,那么您将收到错误,因为select语句无法打开事务。

    如果您仍想要从非交易主体(select语句)调用任何具有交易声明的函数,那么您的函数应该能够打开单独的独立事务(PRAGMA AUTONOMOUS_TRANSACTION)。

    有关交易管理的更多信息,请参阅http://www.datacoons.com/content/transaction.php