SQL(Oracle)中是否有任何方法可以使用我可以获得类似的东西:
select checksum(select * from table) from table;
最佳答案
您可以使用 DBMS_SQLHASH.GETHASH
为了这。查询结果必须是有序的并且不能包含任何 LOB,否则结果将是不确定的。
select dbms_sqlhash.gethash(q'[select * from some_table order by 1,2]', digest_type => 1)
from dual;
其中digest_type 1 = HASH_MD4,2 = HASH_MD5,3 = HASH_SH1。
默认情况下,该软件包不会授予任何人。要使用它,您需要有人以 SYS 身份登录并运行以下命令:
SQL> grant execute on dbms_sqlhash to <your_user>;
查询结果必须排序,如“Bug 17082212 : DBMS_SQLHASH DIFFERENT RESULTS FROM DIFFERENT ACCESS PATH”中所述。
我不确定为什么 LOB 不起作用,但这可能与函数
ORA_HASH
的方式有关。不适用于 LOB。 This Jonathan Lewis article包括 ORA_HASH
的一些示例为相同的 LOB 数据返回不同的结果。和最新版本的 SQL Language Reference警告 ORA_HASH
不支持 LOB。
关于sql - Oracle 获取由 select 子句定义的数据 block 的校验和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59721968/