在Oracle中寻找一个值

前端之家收集整理的这篇文章主要介绍了在Oracle中寻找一个值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在Oracle中寻找一个值

当你接手一个文档缺失的项目,使用了Oracle数据库,表间关系不清楚,偶尔在报错的日志中看到一些值,你可能需要这项技能

问题

只知道一个值,比如主键
不知道这个值属于哪张表哪一列

遍历整个数据库所有表所有列

  • 耗时很长
SET SERVEROUTPUT ON SIZE 100000 DECLARE match_count INTEGER;
  -- 改成你想要搜索的Oracle用户,注意使用大写
  v_owner VARCHAR2(255) :='CT0805';

  -- 设置要搜索的数据类型,比如VARCHAR2,CHAR,NUMBER等,注意使用大写
  v_data_type VARCHAR2(255) :='VARCHAR2';

  -- 设置要搜索的值
  v_search_string VARCHAR2(4000) :='000118100000000008BW';

  BEGIN FOR t IN (SELECT table_name,column_name FROM all_tab_cols where owner=v_owner and data_type = v_data_type) LOOP EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||t.table_name||' WHERE '||t.column_name||' = :1' INTO match_count USING v_search_string;

  IF match_count > 0 THEN
  dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
  END IF;

  END LOOP;
  END;
  /

说明

  • 只能在sqlplus中,或者pl/sql developer的命令窗口中执行,不能在sql窗口中执行
  • SET SERVEROUTPUT ON SIZE 100000 是设置缓存大小
  • dbms是oracle处理信息的一个包,相当于java的System.out
  • 执行完成之后,控制台会输出结果
  • v_owner的值,修改成需要搜索的Oracle用户
  • 搜索主键或字符串的话,v_data_type设置成varchar2或char,可能要分别搜索
  • v_search_string是要搜索的值

我的官方博客http://blog.alei.tech ,转载请注明

猜你在找的Oracle相关文章