作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我希望能够显示 Oracle 连接中所有用户数据库的列表,不包括系统数据库。
有一种方法可以区分数据库中的用户表和系统表。但是我找不到任何方法可以过滤掉所有系统数据库。
有谁知道如何实现?
最佳答案
当连接到 oracle 时,您通常会连接到一个数据库,并且在该数据库中您将有许多模式。这些模式在其他一些 rdbms 系统中将被视为“数据库”。每个模式都由一个 DB 用户拥有,该用户可以是系统用户或普通用户。在模式中创建的所有表/对象都由模式所有者“拥有”。
因此,将系统表与用户表分开的粗略方法是将系统用户拥有的模式中的表视为系统表。
如果在 12c 及以上版本的数据库中,您可以这样做:
select t.table_name, t.owner, u.oracle_maintained
from dba_tables t, dba_users u
where t.owner = u.username
and rownum < 100;
如果版本低于 12c,则 oracle_maintained 列不存在,因此您需要此解决方法。 35 应该设置为系统用户的最高 used_id。系统用户通常是数据库中最低的用户。
select t.table_name, t.owner, case when u.user_id > 35 then 'N' else 'Y' end systemgenerated
from dba_tables t, dba_users u
where t.owner = u.username
and rownum < 100;
此外:'and rownum < 100' 应该替换为您自己的表格过滤器。
关于sql - 如何在 Oracle 连接中只查询非系统数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55057513/
我是一名优秀的程序员,十分优秀!