在DB2触发器中,我需要比较CLOB字段的值。类似于:
IF OLD_ROW.CLOB_FIELD != UPDATED_ROW.CLOB_FIELD 但是"!=“并不适用于比较CLOBs。
比较它的方法是什么?
编辑添加:
如果在更新期间更改了Clob字段,则触发器需要执行一些操作。这就是我需要比较触发器代码中的2CLOB的原因。,我在找一些关于如何做到这一点的详细信息,
发布于 2008-11-05 20:28:41
在Oracle10g中,可以使用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;发布于 2008-09-21 17:33:40
计算clobs的md5 (或其他)哈希,然后比较这些哈希。初始计算将是缓慢的,但比较是快速和容易的。如果您的大部分数据不经常更改,这可能是一个很好的方法。
计算md5的一种方法是通过触发器中的java语句。将它们保存在同一个表中(如果可能的话),或者构建一个简单的辅助表。
发布于 2008-09-22 06:56:51
伊格莱科特的想法很好,但有一个警告:
如果您的数据可能受到攻击,请小心逐个比较。目前,为特定的MD5值生成哈希冲突在计算上是不可行的,但是可以生成两个不同的输入,它们将产生相同的MD5 (因此不会触发代码)。还可以使用相同的前缀生成两个不同的字符串,该字符串的哈希值相同。
如果这种攻击会导致系统的完整性受到损害,而这是一个值得关注的问题,那么您需要探索其他选项。最简单的就是切换散列函数,SHA-2目前还没有已知的漏洞.
如果这不是问题的话-去看CRC吧。你在这里不需要密码安全。不过,如果这个东西安装在智能炸弹上,'mkay?:-),就不要使用密码弱的函数。
https://stackoverflow.com/questions/110587
复制相似问题