当前位置:网站首页>金仓数据库 KingbaseES 插件DBMS_UTILITY
金仓数据库 KingbaseES 插件DBMS_UTILITY
2022-06-25 10:45:00 【沉舟侧畔千帆过_】
1. DBMS_UTILITY系统包概述
DBMS_UTILITY 系统包提供一些具有通用功能的子程序。
DBMS_UTILITY 系统包不支持PG模式。
2. DBMS_UTILITY 系统包子程序
DBMS_UTILITY 系统包包含的子程序及简介如下表所示:
表 1 DBMS_UTILITY 包子程序
| 子程序 | 简介 |
FORMAT_CALL_STACK 函数 | 返回当前的调用堆栈。 |
FORMAT_ERROR_STACK 函数 | 返回当前的错误堆栈。 |
FORMAT_ERROR_BACKTRACE 函数 | 返回当前的错误回溯信息。 |
GET_TIME 函数 | 返回一个时间戳。 |
2.1. FORMAT_CALL_STACK 函数
该函数可以返回当前的调用堆栈信息,包括调用对象的地址,调用的行号和调用对象的名称, 它可以用在函数、存储过程或者触发器等 PL/SQL 对象中,用于帮助调试 PL/SQL 程序。
语法:
DBMS_UTILITY.FORMAT_CALL_STACK() RETURN TEXT;
DBMS_UTILITY.FORMAT_CALL_STACK(FORMAT TEXT) RETURN TEXT;
目前调用对象的地址为函数或过程的oid值,如果是内建函数或过程则为对应包的oid值。
使用说明:
FORMAT: 指定调用堆栈信息的显示模式,分别有 'o', 'p', 's' 三种模式。默认使用模式为'p'模式,输出8位有效长度的十进制数输出对象地址信息。
- 其中 'o' 参数将按照 '%8x%8d%s' 格式打印对象地址,调用行号,对象名称,如示例 2 所示。
- 其中 'p' 参数将按照 '%8d%8d%s' 格式打印对象地址,调用行号,对象名称,如示例 3 所示。
- 其中 's' 参数将按照 '%d,%d,%s' 格式打印对象地址,调用行号,对象名称,如示例 4 所示。
示例 :
\set SQLTERM /
CREATE OR REPLACE FUNCTION checkCallStack() RETURNS TEXT AS
stack TEXT;
BEGIN
SELECT dbms_utility.format_call_stack() INTO stack ;
RETURN stack;
END;
/
\set SQLTERM ;
call checkCallStack();
checkcallstack
--------------------------------------------------------------------
----- PL/SQL Call Stack ----- +
object line object +
handle number name +
14575 30 package body sys.dbms_utility.format_call_stack+
16387 4 function public.checkcallstack
(1 row)
2.2. FORMAT_ERROR_STACK 函数
该函数用于返回当前程序发生异常时的错误堆栈,若程序未发生异常,则返回 NULL。
语法:
DBMS_UTILITY.FORMAT_ERROR_STACK() RETURN TEXT;
2.3. FORMAT_ERROR_BACKTRACE 函数
该函数用于返回当前程序发生异常时的错误回溯堆栈,若程序未发生异常,则返回 NULL。
语法:
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE() RETURN TEXT;
示例:
\set SQLTERM /
CREATE OR REPLACE PROCEDURE p01() AS
i INT := 0;
BEGIN
i = i/0;
END;
/
\set SQLTERM ;
\set SQLTERM /
CREATE OR REPLACE PROCEDURE p02() AS
detail TEXT;
stack TEXT;
BEGIN
p01();
EXCEPTION
WHEN DIVISION_BY_ZERO THEN
detail = dbms_utility.format_error_stack();
stack = dbms_utility.format_error_backtrace();
DBMS_OUTPUT.PUT_LINE('FORMAT_ERROR_STACK IS:');
DBMS_OUTPUT.PUT_LINE(detail);
DBMS_OUTPUT.PUT_LINE('FORMAT_ERROR_BACKTRACE IS:');
DBMS_OUTPUT.PUT_LINE(stack);
END;
/
\set SQLTERM ;
CALL p02();
FORMAT_ERROR_STACK IS:
division by zero
at "public.p01", line 4
FORMAT_ERROR_BACKTRACE IS:
at "public.p01", line 4
at "public.p02", line 5
2.4. GET_TIME 函数
该函数用于返回一个时间戳,该时间戳不是标准的系统时间戳,单位为厘秒(百分之一秒)。通常在 PL/SQL 程序开始 和结束时各调用一次该函数,然后用后一个数字减去前一个数字,以确定当前程序的执行耗时。
语法:
DBMS_UTILITY.GET_TIME() RETURN NUMBER;
使用说明:
函数的返回值在 -2147483648 到 2147483647 之间,具体数值取决于机器和系统。调用该函数时,应用程序 需要考虑到返回值的符号。例如,两次调用皆为负数,或者第一次调用为负数,第二次调用为正数等情况。
示例:
\set SQLTERM /
CREATE OR REPLACE PROCEDURE TestGetTime() AS
t1 PLS_INTEGER;
t2 PLS_INTEGER;
BEGIN
t1 := dbms_utility.get_time();
perform pg_sleep(3);
t2 := dbms_utility.get_time();
RAISE NOTICE 'sleeped: % sec.', (t2 - t1) / 100;
END;
/
\set SQLTERM ;
call TestGetTime();
NOTICE: sleeped: 3 sec.
边栏推荐
- Performance file system
- keep-alive
- 每日3题(2)- 找出数组中的幸运数
- Is it safe for Guosen Securities to open a securities account
- A five-year technical Er, based on the real experience of these years, gives some suggestions to the fresh students
- Es learning
- Google Earth engine (GEE) - evaluate enables one click batch download of all single images in the research area (some areas in Shanghai)
- Dell technology performs the "fast" formula and plays ci/cd
- Technical practice and development trend of video conference all in one machine
- Comparison and evaluation of digicert and globalsign single domain ov SSL certificates
猜你喜欢

The title of my composition is - "my district head father"

无心剑中译伊玛·拉扎罗斯《新巨人·自由女神》

What is CRA

网易开源的分布式存储系统 Curve 正式成为 CNCF 沙箱项目

Task03 probability theory

Your driver settings have been set to force 4x antialiasing in OpenGL applications

网络远程访问的方式使用树莓派

Garbage collection mechanism

【图像融合】基于形态学分析结合稀疏表征实现图像融合附matlab代码

Use of Siemens plcs7-200 (I) -- Introduction to development environment and configuration software
随机推荐
今天16:00 | 中科院计算所研究员孙晓明老师带大家走进量子的世界
《天天数学》连载52:二月二十日
Server rendering
手机办理广州证券开户靠谱安全吗?
After reading this article, I will teach you to play with the penetration test target vulnhub - drivetingblues-7
Continuous delivery jenkinsfile syntax
Nuxtjs actual combat case
The title of my composition is - "my district head father"
[observation] objectscale: redefining the next generation of object storage, reconstruction and innovation of Dell Technology
每日3题(2)- 找出数组中的幸运数
Previous string inversion topic
撸一个随机数生成器
看完这篇 教你玩转渗透测试靶机Vulnhub——DriftingBlues-7
一文了解Prometheus
好好思考
单片机进阶---PCB开发之照葫芦画瓢(二)
Learn to learn self-study [learning to learn itself is more important than learning anything]
Software testing to avoid being dismissed during the probation period
垃圾回收机制
Remove the problem of orange border on the desktop control in WebView