如何确定 oracle standard_hash 函数输出的长度?
how to determine the length of the output from oracle standard_hash function?
请问如何确定oracle standard_hash函数输出的大小?
我关注table
Create table Tbl1 (
ID number,
Col_1 Varchar2(3000),
Col_2 Varchar2(3000),
Col_3 Varchar2(3000),
Col_30 Varchar2(3000),
Std_hash raw(**1000**)
);
(table 有 30 个 varchar2(3000) 列。我们只是省略了这里的一些列)
以及以下更新语句
update tbl1 set
std_hash = standard_hash (
ID||
nvl(Col_1 ,'') ||
nvl(Col_2,'') ||
nvl(Col_30,'')
);
我尝试使用 max 和 length 函数来确定存储在 std_hash 中的值的最大长度,我得到了 40
select max(length(std_hash)) from tbl1
MAX(LENGTH(STD_HASH))
---------------------
**40**
列STD_Hash存储table中每一行的散列值。这是否意味着我最初在通过放置 Raw (1000) 创建 table tbl1 时高估了标准哈希的哈希值输出长度的大小?
提前致谢!
好吧,这取决于你实际在做什么。
STANDARD_HASH
接受两个参数;您提供了第一个,但没有提供 方法 (哈希算法的名称)。有效值为:
- SHA1、SHA256、SHA384、SHA512、MD5
默认为 SHA1。
一些测试:
SQL> select
2 length(standard_hash('x', 'SHA1')) sha1,
3 length(standard_hash('x', 'SHA256')) sha256,
4 length(standard_hash('x', 'SHA384')) sha384,
5 length(standard_hash('x', 'SHA512')) sha512,
6 length(standard_hash('x', 'MD5')) md5
7 from dual;
SHA1 SHA256 SHA384 SHA512 MD5
---------- ---------- ---------- ---------- ----------
40 64 96 128 32
SQL>
由于您没有使用该方法,因此使用了 SHA1,结果的长度为 40
- 您注意到的值。这意味着您可以将列创建为
Std_hash raw(40)
而不是 1000
。但是,如果您决定指定另一种方法,则可能需要更改列大小(从 32 到 128)。
请问如何确定oracle standard_hash函数输出的大小?
我关注table
Create table Tbl1 (
ID number,
Col_1 Varchar2(3000),
Col_2 Varchar2(3000),
Col_3 Varchar2(3000),
Col_30 Varchar2(3000),
Std_hash raw(**1000**)
);
(table 有 30 个 varchar2(3000) 列。我们只是省略了这里的一些列)
以及以下更新语句
update tbl1 set
std_hash = standard_hash (
ID||
nvl(Col_1 ,'') ||
nvl(Col_2,'') ||
nvl(Col_30,'')
);
我尝试使用 max 和 length 函数来确定存储在 std_hash 中的值的最大长度,我得到了 40
select max(length(std_hash)) from tbl1
MAX(LENGTH(STD_HASH))
---------------------
**40**
列STD_Hash存储table中每一行的散列值。这是否意味着我最初在通过放置 Raw (1000) 创建 table tbl1 时高估了标准哈希的哈希值输出长度的大小?
提前致谢!
好吧,这取决于你实际在做什么。
STANDARD_HASH
接受两个参数;您提供了第一个,但没有提供 方法 (哈希算法的名称)。有效值为:
- SHA1、SHA256、SHA384、SHA512、MD5
默认为 SHA1。
一些测试:
SQL> select
2 length(standard_hash('x', 'SHA1')) sha1,
3 length(standard_hash('x', 'SHA256')) sha256,
4 length(standard_hash('x', 'SHA384')) sha384,
5 length(standard_hash('x', 'SHA512')) sha512,
6 length(standard_hash('x', 'MD5')) md5
7 from dual;
SHA1 SHA256 SHA384 SHA512 MD5
---------- ---------- ---------- ---------- ----------
40 64 96 128 32
SQL>
由于您没有使用该方法,因此使用了 SHA1,结果的长度为 40
- 您注意到的值。这意味着您可以将列创建为
Std_hash raw(40)
而不是 1000
。但是,如果您决定指定另一种方法,则可能需要更改列大小(从 32 到 128)。