暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle ORA_HAH值冲突。

askTom 2016-09-15
166

问题描述

嗨,汤姆,
我试图给一个表达式赋一个唯一的值,这个表达式的值是不同的,并从多个字段的串联派生出来的。
下面是用法:

查询1 :

创建表表2并行16
作为
从表1a中选择/*+平行(a,16)*/不同的1、2、3、4、5 ;

查询2 :
创建表表3并行16
select /*+ parallel(a,16) */a.*, ora_h作为h(col1||col2||col3||col4||col5,1,4294967295,0) 作为 key
来自表2 ;


查询3 :
从表3组中选择键,计数(1) ,计数(1) ,计数(1)大于1的键;

1.当处理具有较少的记录数的table1 ( ~20k行)时, Query3不返回任何行,这意味着ORA_HAH正在为串联值生成唯一值(col1||col2|col3||col4| |col5)

2. When working with a higher volume ( ~ 700 million rows) the Query3 returns rows which impiles that ORA_HASH is 作为signing the same value to different cancatenated field values. Hence there are value collisions using ORA_HASH.

ORA_HAH可以用来使其工作吗?我们还有什么其他的功能可以用来实现这个目标吗?我们需要键值为数字。
Have tried DBMS_UTILITY.get_h作为h_value (col1||col2||col3||col4||col5, 1, power(2,31)-1) 作为 well but facing the same issue.

任何输入都不胜感激!

谢谢






专家解答

你能先试试这个吗?

ora_hash(col1||col2|...)

尝试

ora_hash(col1||'-'||col2||'-'||...)

以确保它不是一个简单的跨栏值重叠问题。

如果这不起作用,也许可以研究一下dbms_cideo中的散列函数

希望这个能帮上忙。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论