如何通过Oracle查询以特定结尾的表名?

更新于
2026-08-11 05:39:52
2阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

在日常的数据库运维或开发工作中,常常需要快速定位某个后缀的表名。例如寻找所有以 _info_test 或者自定义字符的表。若不熟悉 Oracle 程序视图和模糊匹配语法,往往会出现以下痛点:

  • 不知道应该查询哪个程序视图;
  • 对通配符的使用不清晰,特别是下划线 “_” 作为单字符通配符时需要转义;
  • 不确定自己的权限范围,导致查询结果为空;
  • 忘记了如何在正则表达式中标记字符串。按理说,

下面给出一套完整、可直接拷贝粘贴到 SQL*Plus / SQL Developer 的查询脚本。帮助你一次性解决上述所有痛点。

如何通过Oracle查询以特定的表名?

1️⃣ 先了解自己拥有的视图权限

User Tables


SELECT * FROM USER_TABLES;其实,-- 返回当前使用者拥有的所有表信息

All Tables


SELECT * FROM ALL_TABLES;-- 包含当前使用者能访问到的别人的表

Dba Tables


SELECT * FROM DBA_TABLES;-- 需要 DBA 权限才能看到整个数据库中的所有表

至于步骤一,选择合适的视图并确认权限范围

* 如果你只想看自己的表,请使用 User_Tables.

* 如果你需要查看别人的表,但只有访问权限,请使用 All_Tables.

* 若你是 DBA 或拥有超级权限。则可直接使用 Dba_Tables.

如何通过Oracle查询以特定的表名?

2️⃣ 使用 LIKE 子句查询特定后缀

2.1 LIKE + 通配符 & 转义下划线 “_”


-- 查询所有以 _test
SELECT table_name
FROM all_tables
WHERE table_name LIKE '%\_test' ESCAPE '\';-- 查询所有以 _info
SELECT table_name
FROM user_tables
WHERE table_name LIKE '%\_info' ESCAPE '\';

小提示: 如果你想匹配的是字面量下划线而不是通配符,请在前面加上反斜杠并指定 ESCAPE 字符;否则 Oracle 会把它当作“任意单字符”来处理。其实,

2.2 LIKE + 百分号 “%” 匹配任意长度字符串


-- 查询所有以 _bk
SELECT table_name
FROM all_tables
WHERE table_name LIKE '%_bk';-- 或者更简洁:
SELECT table_name FROM user_tables WHERE table_name LIKE '%_bk';

2.3 指定模式过滤器

name
FROM dbatables
WHERE owner = 'SCOTT'
AND tablename LIKE '%report';CODE>

3️⃣ 使用 REGEXP_LIKE 做更强大的正则匹配

  • $ 标记字符串结束位置。
  • . 匹配任意单字符。
  • * 匹配前一个元素零次或多次。
  • | 表示“或”。
  • 用于分组。
  • \ 开头用于转义特殊字符。

test 或 _info 或者 _bk 的表
SELECT owner。tablename
FROM alltables
WHERE REGEXPLIKE(table_name,'$','i');-- i 为忽略大小写

-- 如果只想找字母数字加下划线组合且以 bk SELECT owner。tablename FROM usertables WHERE REGEXPLIKE(tablename,'^+\_bk$','i');CODE>

4️⃣ 验证查询结果与实际数据是否一致

先通过简单查询查看一张示例程序表的信息,确认字段与数据都符合预期:

datafiles 表结构与部分内容
DESCRIBE dbadatafiles;

SELECT fileid,filename。bytes/1024/1024 AS sizemb FROM dbadatafiles ORDER BY fileid FETCH FIRST 5 ROWS ONLY;CODE>

5️⃣ 常见错误排查教程

    -> 确认使用的是正确的程序视图,而且当前使用者确实有访问该视图的权限。-> 对于 DBA 权限不足,可联系 DBAs 提供临时授权。

  • -> 检查正则表达式是否正确闭合、是否包含必要的转义符。-> 在 SQL Developer 中可以开启正则调试工具进行逐步测试。
  • -> 确认正则中使用了 $ 来限定末尾匹配;如果漏掉 $,可能匹配到内部出现一样子串的数据行。
  • -> 可以添加额外过滤条件: AND NOT owner = 'SYS' AND NOT INSTR = 0。其实,

    6️⃣ 小结与常用方法建议

    • ✔​MUST: 在正式环境里先用 SELECT COUNT 检测行数。再做进一步操作,避免误删或误改大量数据。

  • ✔​MUST: 对于大规模数据集。请使用分页或分区检索,以免占用过多内存和 CPU 时间。话说回来,
  • ✔​MUST: 若仅需读取结构信息。可直接 DESCRIBE 或查询 USERTABCOLUMNS,以获取列名、类型等细节,从而更精准地判断是否为目标业务对象。
  • 标签:结尾

    在日常的数据库运维或开发工作中,常常需要快速定位某个后缀的表名。例如寻找所有以 _info_test 或者自定义字符的表。若不熟悉 Oracle 程序视图和模糊匹配语法,往往会出现以下痛点:

    • 不知道应该查询哪个程序视图;
    • 对通配符的使用不清晰,特别是下划线 “_” 作为单字符通配符时需要转义;
    • 不确定自己的权限范围,导致查询结果为空;
    • 忘记了如何在正则表达式中标记字符串。按理说,

    下面给出一套完整、可直接拷贝粘贴到 SQL*Plus / SQL Developer 的查询脚本。帮助你一次性解决上述所有痛点。

    如何通过Oracle查询以特定的表名?

    1️⃣ 先了解自己拥有的视图权限

    User Tables

    
    SELECT * FROM USER_TABLES;其实,-- 返回当前使用者拥有的所有表信息
    

    All Tables

    
    SELECT * FROM ALL_TABLES;-- 包含当前使用者能访问到的别人的表
    

    Dba Tables

    
    SELECT * FROM DBA_TABLES;-- 需要 DBA 权限才能看到整个数据库中的所有表
    

    至于步骤一,选择合适的视图并确认权限范围

    * 如果你只想看自己的表,请使用 User_Tables.

    * 如果你需要查看别人的表,但只有访问权限,请使用 All_Tables.

    * 若你是 DBA 或拥有超级权限。则可直接使用 Dba_Tables.

    如何通过Oracle查询以特定的表名?

    2️⃣ 使用 LIKE 子句查询特定后缀

    2.1 LIKE + 通配符 & 转义下划线 “_”

    
    -- 查询所有以 _test
    SELECT table_name
    FROM all_tables
    WHERE table_name LIKE '%\_test' ESCAPE '\';-- 查询所有以 _info
    SELECT table_name
    FROM user_tables
    WHERE table_name LIKE '%\_info' ESCAPE '\';

    小提示: 如果你想匹配的是字面量下划线而不是通配符,请在前面加上反斜杠并指定 ESCAPE 字符;否则 Oracle 会把它当作“任意单字符”来处理。其实,

    2.2 LIKE + 百分号 “%” 匹配任意长度字符串

    
    -- 查询所有以 _bk
    SELECT table_name
    FROM all_tables
    WHERE table_name LIKE '%_bk';-- 或者更简洁:
    SELECT table_name FROM user_tables WHERE table_name LIKE '%_bk';

    2.3 指定模式过滤器

    name
    FROM dbatables
    WHERE owner = 'SCOTT'
    AND tablename LIKE '%report';CODE>

    3️⃣ 使用 REGEXP_LIKE 做更强大的正则匹配

    • $ 标记字符串结束位置。
    • . 匹配任意单字符。
    • * 匹配前一个元素零次或多次。
    • | 表示“或”。
    • 用于分组。
    • \ 开头用于转义特殊字符。

    test 或 _info 或者 _bk 的表
    SELECT owner。tablename
    FROM alltables
    WHERE REGEXPLIKE(table_name,'$','i');-- i 为忽略大小写

    -- 如果只想找字母数字加下划线组合且以 bk SELECT owner。tablename FROM usertables WHERE REGEXPLIKE(tablename,'^+\_bk$','i');CODE>

    4️⃣ 验证查询结果与实际数据是否一致

    先通过简单查询查看一张示例程序表的信息,确认字段与数据都符合预期:

    datafiles 表结构与部分内容
    DESCRIBE dbadatafiles;

    SELECT fileid,filename。bytes/1024/1024 AS sizemb FROM dbadatafiles ORDER BY fileid FETCH FIRST 5 ROWS ONLY;CODE>

    5️⃣ 常见错误排查教程

      -> 确认使用的是正确的程序视图,而且当前使用者确实有访问该视图的权限。-> 对于 DBA 权限不足,可联系 DBAs 提供临时授权。

  • -> 检查正则表达式是否正确闭合、是否包含必要的转义符。-> 在 SQL Developer 中可以开启正则调试工具进行逐步测试。
  • -> 确认正则中使用了 $ 来限定末尾匹配;如果漏掉 $,可能匹配到内部出现一样子串的数据行。
  • -> 可以添加额外过滤条件: AND NOT owner = 'SYS' AND NOT INSTR = 0。其实,

    6️⃣ 小结与常用方法建议

    • ✔​MUST: 在正式环境里先用 SELECT COUNT 检测行数。再做进一步操作,避免误删或误改大量数据。

  • ✔​MUST: 对于大规模数据集。请使用分页或分区检索,以免占用过多内存和 CPU 时间。话说回来,
  • ✔​MUST: 若仅需读取结构信息。可直接 DESCRIBE 或查询 USERTABCOLUMNS,以获取列名、类型等细节,从而更精准地判断是否为目标业务对象。
  • 标签:结尾