oracle数据库根据列值溯源表名和列名

数据库:oracle11g 11.2.0
工具:Oracle SQL Developer 17.2.0.188

我只知道数据库中某个表的某个列的某行中存在一个值”RoyDD”,现在希望寻找到这个值所在表及对应字段。

DECLARE  
CURSOR cur_query IS   
  SELECT table_name, column_name, data_type FROM user_tab_columns;   
  a NUMBER;   
  sql_hard VARCHAR2(2000);   
  vv NUMBER;  
BEGIN   
  FOR rec1 IN cur_query LOOP  
  a:=0;   
  IF rec1.data_type ='VARCHAR2' OR rec1.data_type='CHAR' THEN   
  a := 1;   
  END IF;   
  IF a>0 THEN   
  sql_hard := '';   
  sql_hard := 'SELECT count(*) FROM '|| rec1.table_name ||' where '   
  ||rec1.column_name|| ' like''RoyDD'''; -- RoyDD为字段值   
  dbms_output.put_line(sql_hard);
  EXECUTE IMMEDIATE sql_hard INTO vv;  
  IF vv > 0 THEN dbms_output.put_line('[字段值所在的表.字段]:['||rec1.table_name||'].['||rec1.column_name||']');   
  END IF;  
  END IF;  
  END LOOP;  
END;

注意问题


  1. 执行完成后,发现没有结果输出?
    注意启用DBMS输出,以我的工具为例,在”查看”-“DBMS输出”,打开下图所示界面。点击图中绿色加号,选择连接对应用户,然后再执行上述语句,就可以看到图中所示的”[字段值所在的表.字段]”就是我们要的答案,如果有多个表多个字段存在该值,则会显示多行”[字段值所在的表.字段]”结果。
    Oracle SQL Developer DBMS输出界面
    2.执行报错ORA-20000: ORU-10027: buffer overflow
    缓冲区大小不足,如上图中所示有文本框直接修改大小,也可以通过在begin下方增加DBMS_OUTPUT.ENABLE(1000000);设置大小,还可以直接注释掉dbms_output.put_line(sql_hard);不打印多余语句只打印结果。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值