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

近来写了一个存储过程用来在建数据库对象前,返回对象名是否占用的存储过程![@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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20546452/viewspace-845019/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值