DBMS_UTILITY 包

部分兼容 ORACLE 的 DBMS_UTILITY 包,提供一些实用的方法。

22.1 相关方法

  1. FORMAT_ERROR_STACK

获取 PL/SQL 异常的堆栈信息。

语法如下:

FUNCTION FORMAT_ERROR_STACK (
)RETURN VARCHAR2;
  1. GET_HASH_VALUE

对于指定的字符串,返回范围在[base, base+hase_size-1]的散列值。

语法如下:

FUNCTION  GET_HASH_VALUE(
	NAME		VARCHAR,
	BASE		INT,
	HASH_SIZE	INT
)RETURN INT;

参数详解

  • NAME

    指定的要被 HASH 的字符串

  • BASE

    返回的 HASH 值的基准值,即返回值的最小值

  • HASH_SIZE

    指定的 HASH 表的大小

  1. GET_TIME

返回一个代表当前时间的以 1/100 秒为精度的值,该值并不真正表示当前的时间值,此方法常用来计算两个时间点的间隔。

语法如下:

FUNCTION GET_TIME() RETURN NUMBER;

参数详解

  1. FORMAT_CALL_STACK

返回 PL/SQL 当前调用的堆栈,包括每层的栈帧方法名。

语法如下:

FUNCTION FORMAT_CALL_STACK() RETURN VARCHAR2;
  1. FORMAT_ERROR_BACKTRACE

返回 PL/SQL 发生异常时的堆栈信息,包括每层的栈帧地址和方法名。

语法如下:

FUNCTION FORMAT_ERROR_BACKTRACE() RETURN VARCHAR2;
  1. COMMA_TO_TABLE

将用户输入的字符串依据逗号进行分割,返回分割后字符串的 PL/SQL 表。

语法如下:

PROCEDURE COMMA_TO_TABLE(
   LIST		IN		VARCHAR2,
   TABLEN	OUT 	BINARY_INTEGER, 
   TAB		OUT 	LNAME_ARRAY
);

参数详解

  • LIST

    输入参数,待分割的字符串列表,若其中的单个字符串未用双引号括起来,则仅支持该字符串格式为 a[.b]*,其中的 A 和 B 均为不包含特殊字符的字符串;若列表中的单个字符串需要包含部分特殊字符,则需要将该字符串用双引号括起来,COMMA_TO_TABLE 不会对双引号中的字符串做字符转换处理。

  • TABLEN

    输出参数,PL/SQL 表中的成员个数。

  • TAB

    输出参数,对用户输入的字符串列表依据逗号进行分割后得到的 PL/SQL 表。

使用说明:

输入的字符串参数 LIST 不能为空,且多个字符串之间需用逗号进行分隔。双引号内的逗号视作正常字符处理。

  1. TABLE_TO_COMMA

TABLE_TO_COMMA 是 COMMA_TO_TABLE 的逆过程,TABLE_TO_COMMA 将字符串的 PL/SQL 表合并成以逗号为分隔符的字符串列表。

语法如下:

PROCEDURE TABLE_TO_COMMA(
   TAB		IN		LNAME_ARRAY,
   TABLEN	OUT		BINARY_INTEGER, 
   LIST		OUT		VARCHAR2
);

参数详解

  • TAB

    输入参数,待合并字符串的 PL/SQL 表。

  • TABLEN

    输出参数,PL/SQL 表中的成员个数。

  • LIST

    输出参数,将 PL/SQL 表中的字符串以逗号为分隔符进行合并后的字符串列表。

使用说明:

输入的 PL/SQL 表的最后一个成员必须为 NULL,否则报错。

22.2 举例说明

使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程 SP_CREATE_SYSTEM_PACKAGES 创建系统包。

SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_OUTPUT');
SP_CREATE_SYSTEM_PACKAGES(1,'DBMS_UTILITY');
SET SERVEROUTPUT ON;   //DBMS_OUTPUT.PUT_LINE需要设置这条语句,才能打印出消息

例 1 COMMA_TO_TABLE 过程的使用。

DECLARE
	LEN INTEGER := 0;
	ARRAY1 DBMS_UTILITY.LNAME_ARRAY;
	P_LIST VARCHAR2 := 'HOPE,HOPE.WORLD.PEACE,"#*!:,\A123("';
BEGIN
	DBMS_UTILITY.COMMA_TO_TABLE(P_LIST, LEN, ARRAY1);
	FOR I IN 1..LEN LOOP
		DBMS_OUTPUT.PUT_LINE(ARRAY1[I]);
	END LOOP;
END;

执行结果如下:

HOPE
HOPE.WORLD.PEACE
"#*!:,\A123("

例 2 TABLE_TO_COMMA 过程的使用。

DECLARE
	LEN INTEGER := 0;
	ARRAY1 DBMS_UTILITY.LNAME_ARRAY;
	STR VARCHAR(200) := '';
BEGIN
	ARRAY1[1] := 'AA*($#^';
	ARRAY1[2] := 'BB.,123';
	ARRAY1[3] := NULL;
	DBMS_UTILITY.TABLE_TO_COMMA(ARRAY1, LEN, STR);
	DBMS_OUTPUT.PUT_LINE(STR);
END;

执行结果如下:

AA*($#^,BB.,123
微信扫码
分享文档
扫一扫
联系客服