ORA-39824: The OCI_ATTR_DIRPATH_USE_ACTIVE_TRANS attribute was set when no transaction was active.
Cause: There was no active transaction to use.
Action: Start a transaction or do not set the attribute OCI_ATTR_DIRPATH_USE_ACTIVE_TRANS to TRUE.
。
当没有活动的事务时,将OCI_ATTR_DIRPATH_USE_ACTIVE_TRANS属性设置为真,就会引发ORA-39824错误,官方解释是,所请求的操作必须有一个活动事务才行。
常见案例是在使用dirpath构建重复组技术时,程序会抛出ORA-39824,因为对于类型为OCI_DTYPE_DIRPATH_CB的OCIDirPathColArrayEntry结构体,需要在准备文件处理阶段设置OCI_ATTR_DIRPATH_USE_ACTIVE_TRANS属性,以便允许在使用和处理重复组元素时使用Active Transaction,否则就会产生该错误。
(1)在调用OCIDirPathPrepare之前,需要使用OCIStart()开启一个活动的事务,并将OCI_ATTR_DIRPATH_USE_ACTIVE_TRANS属性设置为true来显式启用事务处理;
(2)然后使用OCIDirPathPrepare()预处理;
(3)使用OCIDirPathLoadStream()加载和处理OCIDirPathColArrayEntry结构体;
(4)最后,使用OCIDirPathFinish()完成处理;
(5)OCICommit()提交事务。