【发布时间】:2014-04-15 23:41:42
【问题描述】:
我试图弄清楚如何使用 JDBC 连接和 SQL 语句来读取驻留在 Advantage 数据库服务器上的 DBF/CDX 表(使用免费连接)并找到“已删除”的记录。 (那些被逻辑删除而不是物理删除的记录。)
我知道我可以使用 连接属性,但是我的问题是如何包含它们和 然后再识别它们。
【问题讨论】:
我试图弄清楚如何使用 JDBC 连接和 SQL 语句来读取驻留在 Advantage 数据库服务器上的 DBF/CDX 表(使用免费连接)并找到“已删除”的记录。 (那些被逻辑删除而不是物理删除的记录。)
我知道我可以使用 连接属性,但是我的问题是如何包含它们和 然后再识别它们。
【问题讨论】:
不幸的是,我认为没有一种简单的方法可以通过 JDBC 和纯 SQL 解决方案来做到这一点。正如您所说,可以通过在连接字符串中包含ShowDeleted=true; 来显示逻辑删除的记录。但是这样做之后,就无法区分 SQL 语句中已删除和未删除的 DBF 记录了。
也许可以编写一个Advantage Extended Procedure,它使用导航方法返回有关逻辑删除记录的信息,但这可能需要从头开始做相当多的工作。另一个想法(相当混乱/丑陋的一个)可能是使用两个单独的连接到同一个表,其中一个显示已删除的记录,另一个不显示,然后获取 ROWID 并使用它来隔离已删除的记录。不好玩。
它现在对您没有帮助,但即将发布的版本 (v12) 将包含一个 SQL 标量函数 DELETED(),它为逻辑删除的记录返回 true/false。这正是您所需要的,但要到 2014 年晚些时候才能使用。
【讨论】:
ShowDeleted=true)和 1 仅包含未删除的记录(使用 ShowDeleted=false)。获得这些结果集后,我将它们进行比较以过滤掉“已删除”的记录。
DELETED() 标量函数的 ADS 12 功能的信息...这将非常有用。