您现在的位置: 天极网 > 开发频道 > Oracle约束管理脚本
全文

Oracle约束管理脚本

2001-12-06 15:15作者:石骁騑出处:Yesky责任编辑:
  当前用户下外键的处理 ENABLE或者 DISABLE

v_CursorID := DBMS_SQL.OPEN_CURSOR;
LOOP
FETCH C_CON into R_CON;
notfound:=C_CON%NOTFOUND;
EXIT WHEN notfound;
begin
IF (UPPER(AS_ALTER)='DISABLE' AND R_CON.STATUS='ENABLED' OR
UPPER(AS_ALTER)='ENABLE' AND R_CON.STATUS='DISABLED') THEN
v_StrCon := 'ALTER TABLE '||R_CON.owner||'.'||R_CON.table_name||' '||
UPPER(as_alter) || ' CONSTRAINT '||R_CON.constraint_name;
DBMS_SQL.PARSE( v_CursorID, v_StrCon, DBMS_SQL.V7);
v_FkNum :=v_FkNum+1;
END IF;
EXCEPTION
WHEN OTHERS THEN
v_sqlcode := SQLCODE;
v_sqlerrm := SUBSTR(SQLERRM,1,600);
DBMS_OUTPUT.PUT_LINE('ERROR: '||' '||V_SQLERRM);
-- 找出错误原因
IF (v_sqlcode = -2298) THEN
p_con_err(R_CON.CONSTRAINT_NAME);
END IF;
END;
END LOOP;
CLOSE C_CON;
DBMS_OUTPUT.PUT_LINE('====== Foreign Keys were '||as_alter||', total '||to_char(v_FkNum)||' =====');
-- 当前用户下触发器的处理 ENABLE或者 DISABLE
FOR T_TRIGGER IN C_TRIGGER LOOP
BEGIN
IF (UPPER(AS_ALTER)='DISABLE' AND T_TRIGGER.STATUS='ENABLED' OR
UPPER(AS_ALTER)='ENABLE' AND T_TRIGGER.STATUS='DISABLED') THEN
v_StrTri := 'ALTER TRIGGER '||T_TRIGGER.TRIGGER_name ||' '||UPPER(as_alter);
DBMS_SQL.PARSE( v_CursorID, v_StrTri, DBMS_SQL.V7);
v_TriNum :=v_TriNum+1;
END IF;
EXCEPTION
WHEN OTHERS THEN
v_sqlcode := SQLCODE;
v_sqlerrm := SUBSTR(SQLERRM,1,600);
DBMS_OUTPUT.PUT_LINE('ERROR: '||V_SQLCODE||' '||V_SQLERRM);
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE('====== Triggers were '||as_alter||', total '||to_char(v_TriNum)||' =====');
DBMS_SQL.CLOSE_CURSOR(v_CursorID);
ELSE -- 输入参数不正确
DBMS_OUTPUT.PUT_LINE('ERROR:输入参数不正确,参数为ENABLE或者DISABLE!');
END IF;
DBMS_OUTPUT.PUT_LINE('END TIME: '||to_char(sysdate));
END;
/

  二、约束错误自动查找脚本

  一般,数据库管理员在对数据进行维护时,如新数据的导入前,首先要关闭所有的外键和触发器,数据成功导入后,再打开导入前关闭的外键和触发器。这时经常会遇到错误号为ORA-02298的“未找到父项关键字”的错误。该错误的原因就是数据库表中出现了不能满足外键约束条件的记录。这里,另外给出了一个脚本(P_CON_ERR)用来自动查找造成这类错误的原因,也就是找出不满足外键约束条件的字段值。

  该存储过程可单独运行,同时在前面介绍的存储过程P_ALTERCONS中也进行了调用,在存储过程P_ALTERCONS中,可以看到在打开外键时,如果出现错误号为ORA-02298的错误,就调用该存储过程,自动查找造成外键不能启动的原因。

  下面是单独运行该存储过程的例子,在SQL/PLUS环境下:

SQL> SET SERVEROUTPUT ON;
SQL> EXEC P_CON_ERR('FK_SB_HJJL_RELATION__SB_PZXH');
外键错误情况
============
NSRNM,PZLXDM,PZXH
-----------------
190321058, 900, 13546
777777775, 108, 17526
777777775, 108, 17528
777777775, 108, 17531
777777775, 108, 17546

共3页。 9 7 1 2 3 8 :

软件资讯·软件下载尽在天极软件

相关搜索:
相关文章及软件
关注此文读者还看过
热门关注
特别推荐
网友关注
软件下载
娱乐下载
驱动下载
文章排行
本周
本月
最近更新
关于我们|About us|网站律师|天极服务|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2009 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 渝ICP证B2-20030003号
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众