ABAP中的自主事务模拟



当主程序仍在运行时,我试图在数据库表中提交DML更新,但没有提交,因为将来可能会出现错误,可能需要回滚,但内部(保存的(更新应该保留。就像在Oracle自主事务中一样。

Call function ... starting new task ...Submit ... and return不起作用,因为它们会影响主事务。

有没有一种方法可以在不中断主LUW的情况下启动嵌套数据库LUW并提交它?

我不知道用OpenSQL做这件事的方法。但是,当您使用ADBC框架时,类CL_SQL_CONNECTION的每个实例都在一个单独的数据库LUW中运行。

除非迫不得已,否则我通常不建议使用ADBC,因为:

  • 您现在正在将SQL语句编写为字符串,这意味着您没有编译时语法检查
  • 不能再将变量放入SQL代码中了。(好吧,可以,但不应该。因为您可能会以这种方式创建SQL注入漏洞(。您需要使用statement->set_param传递所有变量
  • 您现在正在编写NativeSQL,这意味着您可能会无意中编写无法移植到其他数据库后端的SQL

您可以创建单独的函数来保存更改,也可以使用启动新任务模式调用您的函数,如下所示。

call function 'ZFUNCTION' starting new task 'SAVECHANGES'
exporting
param  = value.

最新更新