You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Oracle SQL Developer中查找包含特定内容的表的方法

全库搜索含特定内容的表实现方案

这一需求完全可实现,核心逻辑是通过数据库的系统元数据表批量生成查询语句,不需要手动逐表执行查询,以下是主流数据库的实现脚本:

MySQL 实现

  • 执行前如果表数量较多,先执行以下语句调整拼接长度限制:
    SET SESSION group_concat_max_len = 1000000;
  • 执行动态查询脚本,替换关键词即可:
SET @search_keyword = 'Montana';
SET @sql = '';

SELECT 
  GROUP_CONCAT(
    'SELECT ''', table_name, ''' AS matched_table, ''', column_name, ''' AS matched_column FROM `', table_name, '` WHERE `', column_name, '` LIKE ''%', @search_keyword, '%'' LIMIT 1' 
    SEPARATOR ' UNION ALL '
  ) INTO @sql
FROM information_schema.columns 
WHERE table_schema = DATABASE() -- 可替换为指定的数据库名
  AND data_type IN ('char', 'varchar', 'text', 'longtext', 'mediumtext', 'tinytext');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

执行后直接返回所有包含指定关键词的表名和对应匹配列。

PostgreSQL 实现

DO $$
DECLARE
    search_keyword TEXT := 'Montana';
    match_flag INT;
    rec RECORD;
BEGIN
    FOR rec IN 
        SELECT table_name, column_name 
        FROM information_schema.columns 
        WHERE table_schema = 'public' -- 可替换为指定的schema名
          AND data_type IN ('character varying', 'text', 'character')
    LOOP
        EXECUTE format('SELECT 1 FROM %I WHERE %I ILIKE %L LIMIT 1', rec.table_name, rec.column_name, '%' || search_keyword || '%') INTO match_flag;
        IF match_flag = 1 THEN
            RAISE NOTICE '匹配表:%,匹配列:%', rec.table_name, rec.column_name;
        END IF;
    END LOOP;
END $$;

匹配结果会在数据库通知区域输出。

SQL Server 实现

DECLARE @search_keyword NVARCHAR(100) = 'Montana'
DECLARE @sql NVARCHAR(MAX) = ''

SELECT @sql += 'SELECT ''' + t.name + ''' AS matched_table, ''' + c.name + ''' AS matched_column FROM [' + t.name + '] WHERE [' + c.name + '] LIKE ''%' + @search_keyword + '%'' UNION ALL '
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE ty.name IN ('varchar', 'nvarchar', 'char', 'nchar', 'text', 'ntext')

SET @sql = LEFT(@sql, LEN(@sql) - 10)
EXEC sp_executesql @sql

以上所有脚本均自动过滤数值、日期等非字符类型字段,避免类型不匹配报错。如果数据库规模极大,可以在系统表查询环节添加表名前缀、schema等过滤条件,缩小扫描范围进一步提升效率。

内容的提问来源于stack exchange,提问作者325

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:24:04