首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAP HANA -开始传输、回滚、提交

SAP HANA -开始传输、回滚、提交
EN

Stack Overflow用户
提问于 2017-08-23 07:20:01
回答 1查看 6.7K关注 0票数 1

我刚刚开始使用SAP HANA。我来自SQL Server环境。SAP HANA中是否有对应的BEGIN TRAN

看起来像是有命令RollbackCommit,我不知道它什么时候工作,什么时候自动提交。

我想知道是否有像BEGIN TRAN这样的东西,我可以指定不希望下面的更新自动提交

EN

回答 1

Stack Overflow用户

发布于 2017-08-23 08:39:25

在SAP HANA (以及大多数其他DBMS)中,所有命令都在隐式事务上下文中执行。现在不需要显式地声明您想要开始一个事务。

在使用HANA Studio时,需要注意的一件事是,默认会话设置是使用AUTOCOMMIT,这意味着每个命令都将在其自己的事务中执行,并立即COMMITted。为了将命令捆绑到一个事务中,您必须将会话参数更改为AUTOCOMMIT=false

除此之外,还可以选择在AUTONOMOUS TRANSACTION中运行代码,这基本上为您的过程提供了自己的独立事务。

SAP HANA没有提供的东西(直到HANA 2 SP02)是“子事务”或“本地事务”-这就是MS SQL Server中的BEGIN TRAN所做的-您可以嵌套并以嵌套的方式提交或回滚。

当然,这是文档化的herehere,因此您可能希望熟悉事务概念。

总而言之:在您的存储过程中进行事务管理通常指向使用显式中间结果集(例如临时表)对数据进行“逐步”处理。这是一种非常昂贵的方法,应该被HANA SQL脚本中更灵活的“数据流”方法所取代。而不是插入/更新到temp中。表中,SELECT的结果被简单地赋值给变量。SQL脚本编译器在执行时计算出最终(传递的)数据转换是什么样子,修剪未使用的变量和处理步骤,在可能的情况下并行化SELECT,并以更快的速度和/或以更少的资源使用提供相同的输出。

我要说的基本上是:当直接从MS SQL Server移植代码时,请注意在SAP HANA中可能有更好的方法来实现这些功能。

备注II:显然,这是我的观点,但我发现在使用存储过程时,子事务相当混乱。在不实际了解过程调用树的所有子事务逻辑的情况下,客户端应用程序将失去对事务处理的控制。突然之间,客户端认为仍未提交的事务已经提交或回滚-没有任何指示客户端应用程序。对我来说,这是一个不一致的配方,如果可能的话,应该避免。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45828352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档