使用SYSTEM用户时,如何在Oracle SQL中仅列出自建表?
解决SQL Plus中只查看自建表的问题
嗨,作为刚接触SQL Plus的新手,遇到这种结果太多找不到自己表的情况太正常了,我来给你捋清楚怎么解决!
首先得明白为什么你用那两个命令会返回几千条结果:
SELECT owner, table_name FROM dba_tables:这个命令会列出所有用户的所有表,包括Oracle自带的系统表、其他用户的表,所以结果自然多到爆炸。SELECT table_name FROM user_tables:这个是列出当前登录用户名下的表,但你用的是SYSTEM账户——这是Oracle的系统管理员账户,本身就自带了大量系统维护用的表,所以你自己建的15张表就被淹没在里面了。
接下来给你几个实用的解决办法,按从临时救急到规范操作排序:
方法1:按创建时间过滤(最快找到你的表)
你是最近才创建的这些表,所以可以通过created字段筛选出最近创建的表,一眼就能找到自己的:
SELECT table_name, created FROM user_tables WHERE created > TO_DATE('2024-05-01', 'YYYY-MM-DD') -- 把日期改成你开始建表的那天 ORDER BY created DESC;
执行后结果会按创建时间倒序排列,最上面的就是你刚建的表,一目了然。
方法2:用模糊查询找已知关键词的表
如果你记得部分表名的关键词(比如你习惯给表加_test后缀,或者前缀是my_),可以用LIKE模糊匹配:
SELECT table_name FROM user_tables WHERE table_name LIKE '%test%'; -- 替换成你记得的关键词
这样就能快速定位到相关的表。
方法3:规范操作——创建专属普通用户(推荐长期用)
其实不建议用SYSTEM这类系统账户来建业务表,系统账户的表容易和系统表混在一起,而且权限太大容易误操作。最好创建一个自己的普通用户,以后用这个用户建表:
-- 1. 创建你的专属用户(替换成你想要的用户名和密码) CREATE USER my_dev IDENTIFIED BY my_dev_password; -- 2. 授予必要的权限(登录、建表、使用表空间) GRANT CREATE SESSION, CREATE TABLE, UNLIMITED TABLESPACE TO my_dev;
创建完成后,退出SYSTEM账户,用my_dev登录SQL Plus,再执行:
SELECT table_name FROM user_tables;
这时返回的就只有你自己建的表了,再也不会被系统表干扰!
内容的提问来源于stack exchange,提问作者Alexandru Petrea
相关产品推荐
相关产品推荐

