sql - 如何在 Oracle 连接中仅查询非系统数据库?

标签 sql database oracle system

我希望能够显示 Oracle 连接中所有用户数据库的列表,不包括系统数据库。

有一种方法可以区分数据库中的用户表和系统表。但我找不到任何方法来过滤掉所有系统数据库。

有谁知道如何实现吗?

最佳答案

连接到 Oracle 时,您通常会连接到一个数据库,并且在该数据库中您将拥有许多模式。这些模式在其他一些 RDBMS 系统中将被视为“数据库”。每个模式都由一个数据库用户拥有,该用户可以是系统用户或普通用户。在模式中创建的所有表/对象均由该模式的所有者“拥有”。

因此,将系统表与用户表分开的粗略方法是将系统用户拥有的架构中的表视为系统表。

如果数据库版本为 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/

相关文章:

mysql - 在 MySQL 中如何使用 case 语句重写查询?

c# - SQL Server中如何查询XML列中的数据

SQL 日期重叠

sql - 有没有办法替代 GROUP BY

sql - sql developer中的NLS设置以更改数字格式

sql - HSQLDB 2.2.9 运行脚本+SqlFile

sql - 如何在mssql中使用左连接与json路径?

php - 数据库访问抽象类

c# - 即使在为 11g 安装了 oracle 即时客户端后,asp.net 应用程序也没有连接到 oracle 11g

oracle - 如何从 Oracle APEX/SQL Workshop 导出完整的数据模型?