DBMS_APPLICATION_INFO包

DBMS_APPLICATION_INFO 包用于记录数据库正在运行的模块名称以及模块正在执行的事务名称。利用这个包,管理员和开发者可以进行性能追踪以及调试。

表1展示了DBMS_APPLICATION_INFO包的子程序。

DBMS_APPLICATION_INFO包子程序 说明 过程/函数
READ_CLIENT_INFO 获取当前会话的客户端信息 过程
READ_MODULE 获取数据库当前运行的模块名称以及模块正在执行的事务名称 过程
SET_ACTION 设置当前模块正在执行的事务名称 过程
SET_CLIENT_INFO 设置当前会话的客户端信息 过程
SET_MODULE 设置当前运行的模块名称 过程

原型

CREATE OR REPLACE PACKAGE PUBLIC.DBMS_APPLICATION_INFO
AS
    procedure read_client_info(client_info out varchar2);
    procedure read_module(module_name out varchar2, action_name out varchar2);
    procedure set_module(module_name varchar2, action_name varchar2);
    procedure set_action(action_name varchar2);
    procedure set_client_info(client_info varchar2);
END;

参数最大为64字节,超过会被截断。

示例

--清理环境
drop procedure p1;
--创建存储过程
create or replace procedure p1() as
DECLARE
l_clinent VARCHAR2(100);
l_mod_name VARCHAR2(100);
l_act_name VARCHAR2(100);
BEGIN
--设置当前会话的客户端信息
dbms_application_info.set_client_info('my client');
--获取当前会话的客户端信息
dbms_application_info.read_client_info(l_clinent);
dbms_output.put_line('client='||l_clinent);

--设置当前运行的模块名称
dbms_application_info.set_module('my mod','inserting');
--获取数据库当前运行的模块名称以及模块正在执行的事务名称
dbms_application_info.read_module(l_mod_name,l_act_name);
dbms_output.put_line('mod_name='||l_mod_name);
dbms_output.put_line('act_name='||l_act_name);

--设置当前模块正在执行的事务名称
dbms_application_info.set_action('function');

dbms_application_info.read_module(l_mod_name,l_act_name);
dbms_output.put_line('mod_name='||l_mod_name);
dbms_output.put_line('act_name='||l_act_name);
END;
LANGUAGE 'PLOSCAR';

--执行存储过程
EXEC p1();
client=my client
mod_name=my mod
act_name=inserting
NOTICE, 在READ_MODULE里OUT类型参数输入值已被忽略(参数值已被置为 NULL)
NOTICE, 在READ_MODULE里OUT类型参数输入值已被忽略(参数值已被置为 NULL)
mod_name=my mod
act_name=function