如何将本地 CLOB 列与远程数据库实例中的 CLOB 列进行比较
我想验证 2 个 CLOB 列中的数据在 2 个不同的实例上是否相同。如果这些是 VARCHAR2 列,我可以使用 MINUS 或联接来确定行是否在一个实例中或另一个实例中。不幸的是,Oracle 不允许您对 CLOB 列执行设置操作。
如何比较 2 个 CLOB 列,其中一列位于本地实例中,另一列位于远程实例中?
示例表结构:
CREATE OR REPLACE TABLE X.TEXT_TABLE
( ID VARCHAR2,
NAME VARCHAR2,
TEXT CLOB
);
I want to verify that the data in 2 CLOB columns is the same on 2 different instances. If these were VARCHAR2 columns, I could use a MINUS or a join to determine if rows were in one instance or the other. Unfortunately, Oracle does not allow you to perform set operations on CLOB columns.
How do I compare 2 CLOB columns, one of which is in my local instance and one that is in a remote instance?
Example table structure:
CREATE OR REPLACE TABLE X.TEXT_TABLE
( ID VARCHAR2,
NAME VARCHAR2,
TEXT CLOB
);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 Oracle 全局临时表将 CLOB 临时拉取到本地实例。然后,您可以使用 DBMS_LOB.COMPARE 函数来比较 CLOB 列。
如果此查询返回任何行,则 CLOB 不同(或多或少的字符、换行符等),或者其中一行仅存在于其中之一中实例。
You can use an Oracle global temporary table to pull the CLOBs over to your local instance temporarily. You can then use the DBMS_LOB.COMPARE function to compare the CLOB columns.
If this query returns any rows, the CLOBs are different (more or less characters, newlines, etc) or one of the rows exists in only one of the instances.
您可以使用DBMS_SQLHASH来比较相关数据的哈希值。与移动和比较 CLOB 相比,这应该使用更少的 IO。下面的查询只会告诉您整个表中是否存在任何差异,但您可以缩小范围。
You can use DBMS_SQLHASH to compare the hashes of the relevant data. This should use significantly less IO than moving and comparing the CLOBs. The query below will just tell you if there are any differences in the entire table, but you can narrow it down.