Oracle 根据字段值查询其所在的表、字段

时间:2020-06-28 18:45:56   收藏:0   阅读:246

oracle的我只知道ziduan字段的值,连类型,大小设置全都不知道,如何查询到该字段所在的表,以及该字段名。

1.假设该字段是varchar2或者char类型

DECLARE  
CURSOR cur_hh IS   
  SELECT table_name, column_name, data_type FROM user_tab_columns;   
  LN_COUNT NUMBER;   
  LN_SQL VARCHAR2(2000);   
  LS_COUNT NUMBER;  
BEGIN   
  FOR V_CUR IN cur_hh LOOP  
  LN_COUNT:=0;   
  IF V_CUR.data_type =VARCHAR2 OR V_CUR.data_type=CHAR THEN   
  LN_COUNT := 1;   
  END IF;   
  IF LN_COUNT>0 THEN   
  LN_SQL := ‘‘;   
  LN_SQL := SELECT count(*) FROM || V_CUR.table_name || where    
  ||V_CUR.column_name||  like‘‘0.86‘‘‘;--字段值   
  dbms_output.put_line(LN_SQL);   
  EXECUTE IMMEDIATE LN_SQL INTO LS_COUNT;  
  IF LS_COUNT > 0 THEN dbms_output.put_line([字段值所在的表.字段]:[||V_CUR.table_name||].[||V_CUR.column_name||]);   
  END IF;  
  END IF;  
  END LOOP;  
END;  

2.由于未查到,继续假设为number类型

DECLARE  
CURSOR cur_hh IS  
  SELECT table_name, column_name, data_type FROM user_tab_columns;  
  LN_COUNT NUMBER;  
  LN_SQL VARCHAR2(2000);  
  LS_COUNT NUMBER;  
BEGIN  
  FOR rec1 IN cur_hh LOOP  
  LN_COUNT:=0;  
  IF rec1.data_type =NUMBER THEN  
  LN_COUNT := 1;  
  END IF;  
  IF LN_COUNT>0 THEN  
  LN_SQL := ‘‘;  
  LN_SQL := SELECT COUNT(*) FROM  || rec1.table_name || WHERE  ||rec1.column_name || =0.86;--字段值  
  dbms_output.put_line(LN_SQL);   
  EXECUTE IMMEDIATE LN_SQL INTO LS_COUNT;  
  IF LS_COUNT > 0 THEN  
   dbms_output.put_line([字段值所在的表.字段]:[||rec1.table_name||].[||rec1.column_name||]);  
  END IF;   
  END IF;  
  END LOOP;  
END;  

查询到结果,很多条满足条件的反馈SQL,需要一一确认。

如果还未查到,就需要查询int,CLOB等诸多类型了,需要继续换个类型继续编写

原文:https://www.cnblogs.com/garrett7/p/13203888.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!