sql - Oracle 获取由 select 子句定义的数据 block 的校验和值

标签 sql oracle checksum

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/

相关文章:

image - 计算图像 "Visual"校验和的最快方法

sql - oracle 查询返回每行 4 个重复项

linux - 在哪里可以找到 cksum 的 Linux 实现,它可以完成 OSX cksum -o3 的功能?

sql - 微软 SQL : Conditional ORDER BY ASC/DESC Question

sql - 如何在 if else 语句中设置多个值?

performance - 单个 SELECT 是否会显着降低 Oracle 数据库的性能?

performance - Oracle PL/SQL : Any benefits in changing PLSQL_CODE_TYPE from interpreted to native?

algorithm - 微 Controller 上短数据的校验和?

java - 奇怪的 SQLException - 无法检索事务只读状态服务器

sql - 将 csv 文件导入 postgresql