Oracle 中 根据值 查询 所在 表和字段

--------------------

-- 这里是查询 数字型字段值
/*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 =‘NUMBER‘ THEN
  a := 1;
  end if;
  if a>0 then
  sql_hard := ‘‘;
  sql_hard := ‘SELECT count(*) FROM  ‘|| rec1.table_name ||‘ where ‘
  ||rec1.column_name|| ‘=‘‘TYRCE0BF26AB5C586B3 ‘‘ ‘;
  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;*/

查询字符串类型:

declare
CURSOR cur_query IS
  select a.table_name, a.column_name, a.data_type from user_tab_columns a
         where 1=1
         and (lower(a.data_type) = ‘varchar2‘ or lower(a.data_type) = ‘char‘)
         and NOT a.TABLE_NAME like ‘%$%‘
         and NOT a.TABLE_NAME like ‘%+%‘
         and NOT a.TABLE_NAME like ‘%=%‘
         ORDER BY A.TABLE_NAME ASC
  ;
  a number;
  sql_hard varchar2(2000);
  vv number;
  rscount number;
  str varchar2(2000);
  num number;
  findValue varchar2(500) :=‘R2186E3DC09B88E1AF  ‘;   -- 要查询的字符串值
begin
  rscount:=0;

    str:=‘TRUNCATE table tmp_test‘;
  execute immediate str;  

  str:=‘drop table tmp_test‘;
  execute immediate str;  

  str:=‘CREATE GLOBAL TEMPORARY TABLE tmp_test (tab_name varchar2(500), col_name varchar2(500))  ON COMMIT PRESERVE ROWS‘;
  execute immediate str;    ----使用动态SQL语句来执行

  for rec1 in cur_query loop
        rscount:= rscount + 1;
        a:=0;
        --if rec1.data_type =‘VARCHAR2‘ or rec1.data_type=‘CHAR‘ THEN
        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|| ‘ =‘‘wu‘‘‘;
              ||rec1.column_name|| ‘ =‘‘‘|| findValue || ‘‘‘‘;
              --dbms_output.put_line(sql_hard);
              --dbms_output.put_line( ‘**** ‘ || rec1.table_name||‘--‘||rec1.column_name);
              execute immediate sql_hard INTO vv;
              IF NVL(vv,0) > 0 THEN
               dbms_output.put_line(rec1.table_name||‘--‘||rec1.column_name);
                  str:= ‘insert into tmp_test ‘
                        || ‘ select ‘‘‘ || rec1.table_name ||  ‘‘‘ as tab_name,‘‘‘ || rec1.column_name || ‘‘‘ as col_name from dual‘;

                  execute immediate str;

                  str:= ‘commit‘;
                  execute immediate str;
              end if;
        END IF;
  end loop;

 --str:= ‘select * from tmp_test‘;
 --execute immediate str;

end;

-- 运行完以后 执行
/*
select * from tmp_test;
*/
时间: 2024-08-29 15:23:42

Oracle 中 根据值 查询 所在 表和字段的相关文章

Sql与oracle中null值的区别

原贴链接请点击: 1 null值的介绍 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL ,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此, NULL 并不是一个确定的值. 这是 NULL 的由来.也是 NULL 的基础,所有和 NULL 相关的操作的结果都可以从 NULL 的概念推导出来. 2 oracle中的null值介绍 在不知道具体有什么数据的时候,即未知,可以用NULL, 称它为空,ORACLE中,含有空值的表列长度为零.允许任何一种数据

oracle中查看当前用户的表结构、主键、索引

1.查询表的所有列及其属性 select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = 要查询的表 2.查找表的所有索引(包括索引名,类型,构成列) select t.*,i.index_type from user_ind_columns t,user

Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)

应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create or replace type splitTable is table of varchar2(100); 2.创建函数fn_splitString(功能是将字符串分割成多条记录)--测试语句select * from table(fn_splitString('ernanyinv','nan'))

常用数据库查询判断表和字段是否存在的SQL

常用数据库查询判断表和字段是否存在的SQL(如果结果为1表示存在,为0表示不存在) 1.MSSQL Server 表: SELECT COUNT(*) FROM dbo.sysobjects  WHERE name= 'table_name'; 字段: SELECT COUNT(*) FROM syscolumns  WHERE id=object_id('table_name') AND name= 'column_name'; 2.My SQL 表: SELECT COUNT(*) FROM

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子 时间:2012-11-20 17:54:02 在JDBCPreparedStatement.executeQuery().getMetaData();后,我们可以通过ResultSetMetaData对象查询返回结果集的源数据信息,也就是表结构信息. 示例代码如下: package astar.sutil.db; import java.sql.Connection; import java.sql.Driv

在Oracle中查询表的大小、表的占用情况和表空间的大小

转载自http://blog.csdn.net/cuker919/article/details/8514253 select segment_name, bytes as 大小 from user_segments where segment_type = 'TABLE' and segment_name in ('VIEW_JLZDH_MP_DL_DAY_01','VIEW_JLZDH_MP_DL_DAY_02','VIEW_JLZDH_MP_DL_DAY_03', 'VIEW_JLZDH_

MySQL数据库中查询数据库表、字段总数量,查询数据总量

最近要查询一些数据库的基本情况,由于以前用oracle数据库比较多,现在换了MySQL数据库,就整理了一部分语句记录下来. 1.查询数据库表数量 1 #查询MySQL服务中数据库表数据量 2 SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES GROUP BY table_schema; 3 #查询指定数据库表数量 4 SELECT COUNT(*) TABLES, table_schema FROM infor

oracle中的连接查询总结

连接查询: 连接查询是指基于多张表或视图的查询.使用连接查询时,应指定有效的查询条件,不然可能会导致生成笛卡尔积.如现有部门表dept,员工表emp,以下查询因查询条件无效,而产生笛卡尔积:   (各语句中字段不做解释,主要显示逻辑关系) select dept.dname,emp.ename from dept,emp where dept.name = 'sales'; 有效查询条件应该指定dept表与emp表之间的连接关系.表之间连接关系多如下: 1.相等连接(=) 相等连接主要用于查询主

细说Oracle中NULL值

1.NULL是什么? NULL表示UNKNOW(未知),其不代表不论什么值. 比如一行中某列没有不论什么值即为NULL. ORACLE同意不论什么一种数据类型的字段为空,除了下面两种情况: 1)主键字段(primary key), 2)定义时已经加了NOT NULL限制条件的字段 2.NULL有什么用? 1)NULL可用于条件推断: SELECT * FROM EMP WHERE COMM IS NULL; 或 SELECT * FROM EMP WHERE COMM IS NOT NULL;