DB2对数据库进行全库搜索

来源:互联网 发布:和社交网络类似的电影 编辑:程序博客网 时间:2024/06/08 03:23

客户要求对整个数据库进行搜索,找出敏感字。在网上搜索很久都没有好的解决办法,只好自己写存储过程来处理了。

边学边写可能还有地方不完善的。

--记录查找结果delete table CHECK_RESULT;create table CHECK_RESULT(  check_result_id INTEGER,  system_name     VARCHAR(40),  table_name      VARCHAR(40),  pk_name         VARCHAR(40),  pk_value        VARCHAR(40),  column_name     VARCHAR(40),  column_value    VARCHAR(4000),  keyword         VARCHAR(100));--要查找的关键字delete table CHECK_WORDcreate table CHECK_WORD(  word_id    INTEGER,  word_type  VARCHAR(40),  word_value VARCHAR(100));DROP PROCEDURE Sensitive_key;CREATE PROCEDURE Sensitive_key()LANGUAGE SQLBEGIN   DECLARE SQL VARCHAR(5000);   FOR TN AS C1 CURSOR FOR select table_name from SYSIBM.TABLES WHERE TABLE_SCHEMA='模式名' AND TABLE_TYPE='BASE TABLE'--找出所有表名   DO   BEGIN    FOR COL AS C2 CURSOR FOR SELECT NAME,(SELECT NAME FROM SYSIBM.SYSCOLUMNS where TBNAME=TN.TABLE_NAME AND KEYSEQ=1)ID FROM SYSIBM.SYSCOLUMNS where TBNAME=TN.TABLE_NAME--找出所有列名,以及主键列。由于库里只有主键有序列,所以用这个条件选择主键。    DO    BEGIN      FOR K AS C3 CURSOR FOR SELECT WORD_VALUE FROM CHECK_WORD  --记录了要关键字的表      DO      BEGIN        SET SQL='INSERT INTO CHECK_RESULT(CHECK_RESULT_ID,TABLE_NAME,KEYWORD,column_name,COLUMN_VALUE) SELECT '|| COL.ID ||','''|| TN.TABLE_NAME ||''','''|| K.WORD_VALUE ||''','''|| CHAR(COL.NAME) ||''',CHAR('|| COL.NAME ||') FROM '|| TN.TABLE_NAME || ' WHERE CHAR('|| COL.NAME ||')LIKE ''%'|| K.WORD_VALUE ||'%'''||'';        IF SQL <> '' THEN         PREPARE st FROM SQL;        EXECUTE st;        end if;      END;      END FOR;    END;    END FOR;   END;   END FOR;END;CALL CMBBCD.Sensitive_key();


0 0
原创粉丝点击