当前位置:  开发笔记 > 数据库 > 正文

SQL - 如何比较CLOB

如何解决《SQL-如何比较CLOB》经验,为你挑选了3个好方法。

在DB2触发器中,我需要比较CLOB字段的值.就像是:

IF OLD_ROW.CLOB_FIELD != UPDATED_ROW.CLOB_FIELD 

但"!="不适用于比较CLOB.

比较它的方法是什么?

编辑添加:

如果在更新期间更改了Clob字段,则我的触发器需要执行某些操作.这就是我需要比较触发器代码中的2个CLOB的原因. 我正在寻找有关如何做到这一点的一些详细信息



1> Brian..:

在Oracle 10g中,您可以使用DBMS_LOB.compare()API.

例:

select * from table t where dbms_lob.compare(t.clob1, t.clob2) != 0

完整的API:

DBMS_LOB.COMPARE (
   lob_1            IN BLOB,
   lob_2            IN BLOB,
   amount           IN INTEGER := 4294967295,
   offset_1         IN INTEGER := 1,
   offset_2         IN INTEGER := 1)
  RETURN INTEGER;

DBMS_LOB.COMPARE (
   lob_1            IN CLOB  CHARACTER SET ANY_CS,
   lob_2            IN CLOB  CHARACTER SET lob_1%CHARSET,
   amount           IN INTEGER := 4294967295,
   offset_1         IN INTEGER := 1,
   offset_2         IN INTEGER := 1)
  RETURN INTEGER; 

DBMS_LOB.COMPARE (
   lob_1            IN BFILE,
   lob_2            IN BFILE,
   amount           IN INTEGER,
   offset_1         IN INTEGER := 1,
   offset_2         IN INTEGER := 1)
  RETURN INTEGER;



2> 小智..:

计算clob的md5(或其他)哈希,然后比较它们.初步计算会很慢,但比较快速而简单.如果您的大部分数据不经常更改,这可能是一个很好的方法.

计算md5的一种方法是通过触发器中的java语句.将它们保存在同一个表中(如果可能)或构建一个简单的辅助表.



3> SquareCog..:

Iglekott的想法很好,但有一点需要注意:

如果您的数据可能受到攻击,请小心使用hash-by-hash.目前在计算上不可能为特定的MD5值生成哈希冲突,但是可以生成两个不同的输入,这些输入将生成相同的MD5(因此不会触发您的代码).也可以生成具有相同前缀的两个不同的字符串,这些字符串散列到相同的值.

如果这种攻击可能导致系统的完整性受到损害,并且这是一个问题,那么您需要探索其他选项.最简单的是简单地切换哈希函数,SHA-2目前没有已知的漏洞.

如果这不是一个问题 - 地狱,请使用CRC.你不是在这里寻求加密安全性.如果这些东西安装在智能炸弹上,请不要使用加密功能弱的功能,'mkay?:-)

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有