未正确更新链接的 Oracle 表的访问更新查询

Posted

技术标签:

【中文标题】未正确更新链接的 Oracle 表的访问更新查询【英文标题】:Access update query of linked Oracle tables not updating properly 【发布时间】:2018-03-27 14:31:00 【问题描述】:

我有一个链接到 Access 数据库的 Oracle 表,其中有两列我正在尝试更新:

甲骨文:EAUSER_WELL_SUMMARY - UWI (PK) - MN_FORM - MN_SRC

我正在使用数据库中的 Access 表来更新链接的 Oracle 表中的两列:

访问:TMP_FORM_SRC - UWI (PK) - MAIN_FORM - MAIN_SRC

这是正在使用的 SQL:

    UPDATE eauser_well_summary 
       INNER JOIN [tmp_form_src] 
               ON eauser_well_summary.WELL_UWI = 
                  [tmp_form_src].WELL_UWI 
    SET eauser_well_summary.MAIN_HZ_FM = 
              [tmp_form_src] ! [MAIN_FORM], 
       eauser_well_summary.MAIN_HZ_SOURCE = 
       [tmp_form_src] ! [MAIN_FORM_SRC];

当我运行这个包含大约 3,300 条记录的更新查询时,MN_FORM 列保持未更新,但 MN_SRC 列最终会出现合并的混乱来源。例如,源是 GS、GGX、TEAMDB、TRANSFORM_OVERRIDE 和 TRANSFORM。列中的内容是 GGXBORM_OVERRIDE、GGXBORM_OVERRIDE、TRANSFORMNSFORMIDE 等。

现在,如果我只对一口井运行更新查询,它会正确更新两列。只有当我尝试做不止一件事时才会出现问题。

我尝试只更新 MN_FORM,但收到以下错误消息:

“由于类型转换,Microsoft Access 未更新 0 个字段 失败,0 条记录由于密钥违规,3361 条记录由于 锁违规,以及由于验证规则违规导致的 0 条记录。做 还是要继续运行这种类型的操作查询?”

当我点击是时,一条记录确实更新了。

我无法确定锁冲突,因为我可以单独更新记录,而且,这是一个测试 Oracle 数据库,只有我在其中,所以没有其他人在其中工作。 Access数据库也是如此。

我在整个网络上进行了搜索,但找不到任何可以帮助我解决此问题的内容。任何帮助或指导都会很有用。

谢谢!

更新:根据 SunKing0 提供的文章以及我从 Erik von Asmuth 那里找到的一些额外指导(谢谢两位),我几乎发现问题出在 Oracle 方面。如果我创建链接 Oracle 表的 Access 表并运行更新查询,它运行时不会违反锁。 Erik 建议使用 DLOOKUP 来解决锁冲突,但没有奏效。

有人对通过 Access 更新 Oracle 表时如何解决锁冲突有任何建议吗?有趣的是,它只发生在批处理模式下——如果我使用更新查询只更新一条记录,它会更新而没有错误或问题。

【问题讨论】:

MS Access UPDATE 与 INNER JOIN:***.com/questions/12882212/… 【参考方案1】:

好吧,在尝试了所有方法之后,我的一位同事在网上找到了一份关于 Oracle ODBC 驱动程序中已知错误的文档。推荐使用微软提供的Oracle驱动。

我通过转到 C:\Windows\SysWOW64\odbcad32.exe 运行 ODBC 管理器,然后选择 Microsoft Oracle ODBC 来创建我的连接。然后,我使用新连接重新链接了我的 Oracle 表,并且能够使用以下代码毫无问题地更新表:

UPDATE EAUSER_NFX_HZ_WELL_SUMMARY 
INNER JOIN TMP_FORM 
ON EAUSER_NFX_HZ_WELL_SUMMARY.WELL_UWI = TMP_FORM.WELL_UWI 
SET EAUSER_NFX_HZ_WELL_SUMMARY.MAIN_HZ_FM = [TMP_FORM]![MAIN_FORM], 
 EAUSER_NFX_HZ_WELL_SUMMARY.MAIN_HZ_SOURCE = [TMP_FORM]![MAIN_FORM_SRC];

这里是讨论该错误的文章的链接:

Error updating linked table

【讨论】:

以上是关于未正确更新链接的 Oracle 表的访问更新查询的主要内容,如果未能解决你的问题,请参考以下文章

oracle触发器自身表更新时,怎么拿到别的表字段数据更新自身表的某个字段?

oracle中的统计信息问题

在更新 cx_oracle 中的表时出现 DatabaseError: ORA-00933: SQL 命令未正确结束

sql server 链接到 oracle 的服务器在数据存在时返回未找到数据

在oracle11g中,更新子表数据的时候我把子表的内码全部更新成一个值了,66万多条了,忘了加where条件了

关于oracle中 根据一个表的主键数据同步更新另一个关联表的字段。