2016-11-19 129 views
2

定義一個數據塊的校驗值是否有使用,我可以得到的東西像SQL(Oracle)的任一方法:甲骨文獲得由SELECT子句

select checksum(select * from table) from table; 
+0

你可以試試ORA_HASH。 https://docs.oracle.com/cd/B28359_01/server.111/b28286/functions112.htm#SQLRF06313,以及:http://phil-sqltips.blogspot.ca/2014/05/oracle-table-or -query-checksum-function.html – Klinger

回答

2

您可以使用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>; 
+0

感謝您的回答!任何方法沒有安裝DBMS_SQLHASH? –

+0

它已經安裝,你只需要授予它的訪問權限。無論您選擇哪種選項,您都可能需要運行一些贈款。即使像DBMS_CRYPTO這樣的軟件包通常也不會向公衆授予。 –