加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Oracle中寻找一个值

发布时间:2020-12-12 15:00:31 所属栏目:百科 来源:网络整理
导读:在Oracle中寻找一个值 当你接手一个文档缺失的项目,使用了Oracle数据库,表间关系不清楚,偶尔在报错的日志中看到一些值,你可能需要这项技能 问题 只知道一个值,比如主键不知道这个值属于哪张表哪一列 遍历整个数据库所有表所有列 耗时很长 SET SERVEROUT

在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 ,转载请注明

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读