如何通过Oracle查询以特定结尾的表名?
- 内容介绍
- 文章标签
- 相关推荐
在日常的数据库运维或开发工作中,常常需要快速定位某个后缀的表名。例如寻找所有以 _info_test 或者自定义字符的表。若不熟悉 Oracle 程序视图和模糊匹配语法,往往会出现以下痛点:
- 不知道应该查询哪个程序视图;
- 对通配符的使用不清晰,特别是下划线 “_” 作为单字符通配符时需要转义;
- 不确定自己的权限范围,导致查询结果为空;
- 忘记了如何在正则表达式中标记字符串。按理说,
下面给出一套完整、可直接拷贝粘贴到 SQL*Plus / SQL Developer 的查询脚本。帮助你一次性解决上述所有痛点。
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.
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 提供临时授权。
6️⃣ 小结与常用方法建议
- ✔MUST: 在正式环境里先用 SELECT COUNT 检测行数。再做进一步操作,避免误删或误改大量数据。
在日常的数据库运维或开发工作中,常常需要快速定位某个后缀的表名。例如寻找所有以 _info_test 或者自定义字符的表。若不熟悉 Oracle 程序视图和模糊匹配语法,往往会出现以下痛点:
- 不知道应该查询哪个程序视图;
- 对通配符的使用不清晰,特别是下划线 “_” 作为单字符通配符时需要转义;
- 不确定自己的权限范围,导致查询结果为空;
- 忘记了如何在正则表达式中标记字符串。按理说,
下面给出一套完整、可直接拷贝粘贴到 SQL*Plus / SQL Developer 的查询脚本。帮助你一次性解决上述所有痛点。
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.
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 提供临时授权。
6️⃣ 小结与常用方法建议
- ✔MUST: 在正式环境里先用 SELECT COUNT 检测行数。再做进一步操作,避免误删或误改大量数据。

