ITPub博客

首页 > 数据库 > 数据库开发技术 > 监控对象名称使用情况的一个存储过程

监控对象名称使用情况的一个存储过程

原创 数据库开发技术 作者:xxgoracle 时间:2006-06-22 20:43:32 0 删除 编辑
近来写了一个存储过程用来在建数据库对象前,返回对象名是否占用的存储过程![@more@]

存储过程代码实现如下:

================================================

CREATE OR REPLACE PROCEDURE CHECK_TABNAME_PRO
--检测对象是否存在存储过程
(
P_ObName IN VARCHAR2, --对象名
p_Type IN INT --对象类型
)
/** 对象类型值:
** 1--表
** 2--视图
** 3--索引
** 4--索引分区
** 5--大对象
** 6--包
** 7--包体
** 8--存储过程
** 9--函数
** 10--序列
** 11--同义词
** 12--数据类型
** 13--表分区
** 14--触发器
*/
AS
v_Num INTEGER; --对象存在记录数
v_Type VARCHAR2(30); --对象类型临时变量
v_Name VARCHAR2(30); --对象名称
eInPut EXCEPTION; --参数异常
v_ErrCode VARCHAR2(20); --异常号
v_ErrMsg VARCHAR2(200); --异常信息
v_OutMsg VARCHAR2(100); --返回信息
BEGIN
IF p_ObName IS NULL
OR p_Type IS NULL
THEN
RAISE eInPut;
END IF;


--检索用户表管理数据字典
IF p_Type = 1 THEN
v_Type := UPPER('TABLE');
v_Name := '表';
ELSIF p_Type = 2 THEN
v_Type := UPPER('VIEW');
v_Name := '视图';
ELSIF p_Type = 3 THEN
v_Type := UPPER('INDEX');
v_Name := '索引';
ELSIF p_Type = 4 THEN
v_Type := UPPER('INDEX PARTITION');
v_Name := '索引分区';
ELSIF p_Type = 5 THEN
v_Type := UPPER('LOB');
v_Name := '大对象';
ELSIF p_Type = 6 THEN
v_Type := UPPER('PACKAGE');
v_Name := '包';
ELSIF p_Type = 7 THEN
v_Type := UPPER('PACKAGE BODY');
v_Name := '包体';
ELSIF p_Type = 8 THEN
v_Type := UPPER('PROCEDURE');
v_Name := '存储过程';
ELSIF p_Type = 9 THEN
v_Type := UPPER('FUNCTION');
v_Name := '函数';
ELSIF p_Type = 10 THEN
v_Type := UPPER('SEQUENCE');
v_Name := '序列';
ELSIF p_Type = 11 THEN
v_Type := UPPER('SYNONYM');
v_Name := '同义词';
ELSIF p_Type = 12 THEN
v_Type := UPPER('TYPE');
v_Name := '数据类型';
ELSIF p_Type = 13 THEN
v_Type := UPPER('TABLE PARTITION');
v_Name := '表分区';
ELSE
v_Type := UPPER('TRIGGER');
v_Name := '触发器';
END IF;
BEGIN
SELECT COUNT(*) INTO v_Num FROM USER_OBJECTS
WHERE OBJECT_NAME = UPPER(p_ObName)
AND OBJECT_TYPE = v_Type;
END;
IF v_Num = 0 THEN
v_OutMsg := '对象名'||p_ObName||'未占用!';
DBMS_OUTPUT.PUT_LINE(v_Name||v_OutMsg);
ELSE
v_OutMsg := '对象'||p_ObName||'已存在!';
DBMS_OUTPUT.PUT_LINE(v_Name||v_OutMsg);
END IF;
RETURN;
EXCEPTION
WHEN eInPut THEN
v_ErrCode := '-3000';
v_ErrMsg := '参数有误!';
DBMS_OUTPUT.PUT_LINE(v_ErrCode||' '||v_ErrMsg);
RETURN;
WHEN OTHERS THEN
v_ErrCode := SQLCODE;
v_ErrMsg := SUBSTR(SQLERRM,1,200);
DBMS_OUTPUT.PUT_LINE(v_ErrCode||' '||v_ErrMsg);
RETURN;
END CHECK_TABNAME_PRO;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20546452/viewspace-845019/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 网络规划数据
请登录后发表评论 登录
全部评论
  • 博文量
    37
  • 访问量
    519459