首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -如何比较CLOB

SQL -如何比较CLOB
EN

Stack Overflow用户
提问于 2008-09-21 09:04:24
回答 9查看 20.7K关注 0票数 9

在DB2触发器中,我需要比较CLOB字段的值。类似于:

代码语言:javascript
复制
IF OLD_ROW.CLOB_FIELD != UPDATED_ROW.CLOB_FIELD 

但是"!=“并不适用于比较CLOBs。

比较它的方法是什么?

编辑添加:

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

EN

回答 9

Stack Overflow用户

发布于 2008-11-05 20:28:41

在Oracle10g中,可以使用DBMS_LOB.compare() API。

示例:

代码语言:javascript
复制
select * from table t where dbms_lob.compare(t.clob1, t.clob2) != 0

完整API:

代码语言:javascript
复制
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;
票数 8
EN

Stack Overflow用户

发布于 2008-09-21 17:33:40

计算clobs的md5 (或其他)哈希,然后比较这些哈希。初始计算将是缓慢的,但比较是快速和容易的。如果您的大部分数据不经常更改,这可能是一个很好的方法。

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

票数 7
EN

Stack Overflow用户

发布于 2008-09-22 06:56:51

伊格莱科特的想法很好,但有一个警告:

如果您的数据可能受到攻击,请小心逐个比较。目前,为特定的MD5值生成哈希冲突在计算上是不可行的,但是可以生成两个不同的输入,它们将产生相同的MD5 (因此不会触发代码)。还可以使用相同的前缀生成两个不同的字符串,该字符串的哈希值相同。

如果这种攻击会导致系统的完整性受到损害,而这是一个值得关注的问题,那么您需要探索其他选项。最简单的就是切换散列函数,SHA-2目前还没有已知的漏洞.

如果这不是问题的话-去看CRC吧。你在这里不需要密码安全。不过,如果这个东西安装在智能炸弹上,'mkay?:-),就不要使用密码弱的函数。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/110587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档