查看哪些表的哪些列含有指定字符串(如‘andy’存在哪些表的哪些列中)

-- 查看表中列含有指定字符。
SQL> select * from demo1;

NAME                                   ID
------------------------------ ----------
????                                    4
andy                                    1
andy1                                   2
andy2                                   3
liudehua                                3
????                                    5

6 rows selected.

SQL> select * from demo2;

NAME                                   ID
------------------------------ ----------
andy                                    1
andy2                                   3
andy2                                   3
liudehua                                3

SQL> select * from demo3;

NAME                                   ID
------------------------------ ----------
andy                                    1
andy2                                   3
andy2                                   3
liudehua                                3

SQL> set serveroutput on

SQL>DECLARE
  v_sql VARCHAR2(4000);
  v_tb_column VARCHAR2(4000);
  v_cnt NUMBER(18,0);
  cursor cur is SELECT ‘SELECT ‘‘‘||‘"‘||t1.table_name||‘"."‘||t1.Column_Name||‘"‘||‘‘‘‘||‘ as col_name, NVL(COUNT(t."‘||t1.Column_Name||‘"),0) as cnt FROM "‘||
         t1.table_name||‘" t WHERE t."‘||t1.column_name||‘" like ‘‘%andy%‘‘‘ AS str
    FROM cols t1 left join user_col_comments t2
      on t1.Table_name=t2.Table_name and t1.Column_Name=t2.Column_Name
    left join user_tab_comments t3 
      on t1.Table_name=t3.Table_name 
   WHERE NOT EXISTS ( SELECT t4.Object_Name FROM User_objects t4
               WHERE t4.Object_Type=‘TABLE‘ 
                 AND t4.Temporary=‘Y‘ 
                 AND t4.Object_Name=t1.Table_Name )
     AND (t1.Data_Type=‘CHAR‘ or t1.Data_Type=‘VARCHAR2‘ or t1.Data_Type=‘VARCHAR‘)
   -- AND t1.table_name=‘RUN_STATS‘
   ORDER BY t1.Table_Name, t1.Column_ID;
 
BEGIN
  FOR i IN cur LOOP
    v_sql := i.str; -- 获取将要执行的SQL语句;
    EXECUTE IMMEDIATE v_sql INTO v_tb_COLUMN, v_cnt;
    IF v_cnt > 0 THEN
      dbms_output.put_line(‘table‘||substr(v_tb_column,1,instr(v_tb_column,‘.‘,1,1)-1)||‘ col‘||substr(v_tb_column,instr(v_tb_column,‘.‘,1,1)+1)||‘ has string"andy" ‘);
    END IF;
  END LOOP;
EXCEPTION WHEN OTHERS THEN
BEGIN
  dbms_output.put_line(v_sql);
  dbms_output.put_line(v_tb_column);
END;
END;
/

结果输出:
table"DEMO1" col"NAME" has string"andy"
table"DEMO2" col"NAME" has string"andy"
table"DEMO3" col"NAME" has string"andy"
table"TEAM" col"MENTOR" has string"andy"

PL/SQL procedure successfully completed.

参考:http://bbs.csdn.net/topics/350154546

时间: 2024-10-17 07:59:51

查看哪些表的哪些列含有指定字符串(如‘andy’存在哪些表的哪些列中)的相关文章

Editplus 正则表达式 删除含有指定字符串的行 删除注释

1.删除含有指定字符串的行 替换:  ^.*(指定字符串).*$  为空 例如,删除含有"JOIN"的行, 替换:  ^.*JOIN.*$   为空 2.删除//行注释 替换: //.*$  为空 (需注意,此正则会误删在引号中的'//',  如 'http://www'  ) 3.删除/*...*/段注释 替换: //*.*/n*.*/*/  为空 (需要注意,此正则在Editplus中会有一定的误判,应该是bug,请在替换时单步观察)

查找含有指定字符的表

有的时候,我们想知道包含特定字符的表都有哪些,怎么办呢?其实很简单:SELECT * FROM dbo.MyCustomer WHERE CustomerName LIKE '%AA%' 这个样子的SQL我们都不陌生,很简单的查询.再回过来看下我们现在遇到的问题:我们不知道表的名称.字段的名称,那我们只要列出所有的表和对应的字段然后遍历一下就可以了,换句话说,我们只需要把上面的表名[MyCustomer]和字段名[CustomerName]替换成变量就可以.有了SQL语句通过[EXEC]我们就可

【mysql】存储过程,查询指定数据库、具体编码类型含有某字符串的所有表名和列名

1.需求:就是想在一个数据库中查找存在某字符串的表和列: 2.例子,我这里my_test数据库有3张表,test_replace的name.password列有张三字符串,t1表的name.city列也有张三字符串,t_user表就没有张三字符串. 运行结果 t1,name;t1,city;test_replace,name;test_replace,password 符合要求 3.代码 -- 1.将mysql分隔符从;设置为& DELIMITER & -- 2.如果存在存储过程getCo

导出含有特定字符串的注册表

需求:我导出一份注册表,想导出每个含有TheBest字符串的注册表命令,符合条件的命令却有几十条.于是我不再一条一条导出,准备用c#实现这样的需求. 实现:每个命令的行数不特定,但命令与命令间间隔了两行,于是可以从\r\n\r\n跟\r\n\r\n这样的规律字符中提取出命令,再检测命令是否符合条件,符合则保存到新建的文件中,否则跳过此条命令. string filecontent = System.IO.File.ReadAllText(@"D:\单机安装\my.txt"); int

Sql Server 删除表名包含指定字符串的表

删除包含指定字符串的表 create procedure sys_DeleteTableByTableName(@bianliang varchar(100))asbegindeclare @biao varchar(100),@sql varchar(1000)set @sql='%'[email protected]+'%'declare c cursor for select name from sysobjects where type='u' and name like @sqlset

从指定的路径中查找含有特殊字符串的文件

import java.io.*;import java.util.*;import java.util.concurrent.*;public class SearchFile{    public static void main(String ... strings)    {        final int FILE_Queue_SIZE = 10;        final int SEARCH_THREADS = 100;        Scanner in = new Scann

数据库所有表替换所有列的特定字符串

DECLARE @TableName VARCHAR(119) DECLARE @TableID INT DECLARE @ColName VARCHAR(111) DECLARE Table_Cursor CURSOR FOR SELECT [name],id FROM sysobjects WHERE xtype='U'; OPEN Table_Cursor; FETCH NEXT FROM Table_Cursor INTO @TableName,@TableID; WHILE(@@FET

python脚本从excel表到处数据,生成指定格式的文件

#coding:gbk #导入处理excel的模块 import xlrd #定义哪些字段需要判断,只支持时间字段 toSureColArray = ['CREATE_TIME','MODIFY_TIME'] #确定某个字段是否在数组中 def isColInArray(colName, colArray): for i in range(0, len(colArray)): if (colName == colArray[i]): return 1 else: return 0 #定义子she

Python 判断字符串是否含有指定字符or字符串

Python 判断字符串是否含有指定字符or字符串 ,有如下方法: 1.使用成员操作符 in str1= "ABCDEF123descsf" str2= "CD" result = str2 in str1 print(result) # True 2.使用string模块的find()  rfind  index()  rindex() 原文地址:https://www.cnblogs.com/shenxiaolin/p/12602360.html