DBMS_UTILITY
最近更新时间: 2024-10-17 17:10:00
FORMAT_CALL_STACK
这个内置函数返回一个格式化的字符串,它显示了执行调用堆栈,直至此函数的调用点处的所有过程或者函数的调用顺序。
示例:
create or replace function dbms_uti_func() returns text as
declare
v_str1 text;
v_str2 text;
v_str3 text;
v_str4 text;
begin
v_str1 := dbms_utility.format_call_stack();
select regexp_replace(v_str1,'[ 0-9a-fA-F]{4}[0-9a-fA-F]{4}',' 0','g') into v_str1;
select regexp_replace(v_str1,'[45()]','','g') into v_str1;
v_str2 := dbms_utility.format_call_stack('o');
select regexp_replace(v_str2,'[ 0-9a-fA-F]{4}[0-9a-fA-F]{4}',' 0','g') into v_str2;
select regexp_replace(v_str2,'[45()]','','g') into v_str2;
v_str3 := dbms_utility.format_call_stack('p');
select regexp_replace(v_str3,'[ 0-9a-fA-F]{4}[0-9a-fA-F]{4}',' 0','g') into v_str3;
select regexp_replace(v_str3,'[45()]','','g') into v_str3;
v_str4 := dbms_utility.format_call_stack('s');
select regexp_replace(v_str4,'[ 0-9a-fA-F]{4}[0-9a-fA-F]{4}',' 0','g') into v_str4;
select regexp_replace(v_str4,'[45()]','','g') into v_str4;
return 'v_str1:
'||v_str1 || '
v_str2:
'|| v_str2|| '
v_str3:
'|| v_str3|| '
v_str4:
'|| v_str4;
end;
/
select dbms_uti_func();
GET_HASH_VALUE
这个内置函数用于计算给定字符串的散列值。
使用方法:DBMS_UTILITY.GET_HASH_VALUE ( name VARCHAR2, base NUMBER, hash_size NUMBER) RETURN NUMBER;
参数 | 描述 |
---|---|
name | 需要计算其散列值的字符串。 |
base | 需要生成散列值的起始值。 |
hash_size | 所需散列表的散列值的数量。 |
返回值:计算出来的哈希值
例如,要获取哈希值应在1000到3047之间的字符串上的哈希值,请使用1000作为基值,2048作为hash_size值。
使用场景:对于指定的字符串,返回范围在[base, base+hase_size-1]的散列值
示例:
postgres=# select dbms_utility.get_hash_value('hello tdsql pg',1,10000) from dual;
get_hash_value
----------------
9930
(1 行记录)
注意:
- name为null值无法计算哈希,约定name参数为null时且其他参数正常,则直接返回base值
- base不可为null,可为负值。返回值的最小值为base;返回hash值的最大值bash+hash_size-1。
- hash_size不可为null或者0,若hash_size为负值则返回的哈希值不在哈希范围内,哈希值可能为正,也可能为负(内部运算时会把hash_size转成正值)。
- base和hash_size的最大最小值兼容oracle,因哈希算法不同,因此哈希值不兼容oracle的哈希值。