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的哈希值。